Автор
|
Тема: Ограничение CString
|
Lord_DEMON |
опубликован 25-10-2001 16:58 MSK
Народ, подскажите, кто знает, какое ограничение на максимальный размер у CString??? а то не дай бог когда нить это аукнется мне...
|
FIV2
|
опубликован 25-10-2001 17:17 MSK
U moego kolega byla problema okolo 100k on delal modul dlq html prechati |
Lord_DEMON
|
опубликован 25-10-2001 17:28 MSK
... плохо :((( а что нить другое есть ?? а то у меня XML файл, который я парсю может до полуметра вырости... |
HOMO_PROGRAMMATIS
|
опубликован 25-10-2001 17:33 MSK
Вообще говоря, ограничений быть не должно. Там выделяется буфер и CString - по сути указатель на него, просто умный. Если ты не веришь - попробуй просто запихнуть туда эти полметра. |
purpe
|
опубликован 25-10-2001 17:51 MSK
я тоже голосую за то, что нет ограничений. Там действительно очень умный распределитель памяти.я этот класс разбирал по косточкам и создавал на его основе свой, чтобы его можно было использовать в чистом API - ограничений не было замечено.
|
Lord_DEMON
|
опубликован 25-10-2001 17:53 MSK
Thanks! завтра проверю :) рабочий день закончен :) |
server_mouse
|
опубликован 25-10-2001 17:58 MSK
Утверждаю и готов поспорить, что ограничение CString -- 4Гектара. |
FIV2
|
опубликован 25-10-2001 18:08 MSK
Hahhahahah :) q sam nabludal kak etot klas vav Winodws 2000k uvilecheval size of process posle nkeotorogo vremni zamerzal
|
m_fox
|
опубликован 25-10-2001 18:33 MSK
server_mouse, с тебя пиво :) ты не прав. Во-первых 4 гига (не на серверах) не получится (не будем учитывать уже занятую память). Чтобы получить 4гб CString, надо взять еще 4гб, как исходный буфер. Если заполнять маленькими порциями, то CString делает realloc т.е. не удаляя старую, выделяет новую память... :) >server_mouse >Утверждаю и готов поспорить, что ограничение CString -- 4Гектара.
|
Lord_DEMON
|
опубликован 26-10-2001 12:26 MSK
:)))) Ну в принципе для меня самое главное, что там счетчики 32 разрядные а не 16, а все остальное - ерунда :) |
server_mouse
|
опубликован 26-10-2001 11:43 MSK
2m_fox: Ежели ты динамически распределяешь память, то в 386 на каждый дескриптор (ну пости сегмент) тебе доступно 4Г. Так почему CString не может их распределить? |
Lord_DEMON
|
опубликован 26-10-2001 13:55 MSK
Всем Thanks! Успешно засунул 1 метр! (пройдя кучу собственных ошибок :)) |
m_fox
|
опубликован 26-10-2001 19:07 MSK
2server_mouse Потому что Windows (за исключением Win2k Advanced Server) поддерживают 4гб в системе (а не на каждый процесс) Поэтому гипотетически CString может быть только 2 гб получая из другого буфера. Но изучая в исходниках этот класс, я понял, что немного ошибся. У этого класса есть метод, который выделяет n байт и возвращает указатель. Т.е. можно использовать этот указатель для заполнения строки. Тогда можно сделать и 4 гб. Так что пиво с меня... :) И кстати, у CString нет счетчика длины. GetLength работает как strlen() |
HOMO_PROGRAMMATIS
|
опубликован 27-10-2001 09:05 MSK
Я думаю, стоит создать производный класс с счётчиком длины - поднимите руку те, кто хочет каждый раз ждать strlen при 1-2 гектарах :-) |
server_mouse
|
опубликован 27-10-2001 09:50 MSK
2m_fox: Я с удовольствием проставлю тебе пиво. В любом случае. Пока бери виртуальное: <<<<<<<<<<<<<<<<< ПИВО 1.5л >>>>>>>>>>>>>>>>
|
migel
|
опубликован 27-10-2001 17:59 MSK
Это как это нет длины????? а CStringData на что? да и в исходниках: _AFX_INLINE int CString::GetLength() const { return GetData()->nDataLength; } Так штааа - L2SL :-)
|