Размер класса CString - PullRequest
0 голосов
/ 13 апреля 2009

Как увеличить размер CString, если CString Object получит максимальный размер. или скажите мне функцию, которая может хранить максимум данных больше чем CString

Ответы [ 2 ]

1 голос
/ 13 апреля 2009

В CString фактический размер строки и выделенный буфер хранятся в виде целых чисел со знаком (см. CStringData). Сам строковый буфер выделяется динамически. Это означает, что теоретический предел составляет 2 ^ 31 символов. Практически, в 32-битной среде вы сможете получить намного меньше из-за фрагментации памяти. Кроме того, если вы используете Unicode CString, каждый символ составляет два байта, что означает, что буфер CString будет содержать меньше текста. В 64-битной среде вы можете получить до 2 ^ 31 символов.

Сказав это, вы действительно пытаетесь работать со строками так долго? Вероятно, есть много дел, прежде чем вы достигнете предела длины CString.

1 голос
/ 13 апреля 2009

CString использует выделение кучи для строкового буфера, поэтому фактический предел длины строки зависит от ряда условий и составляет несколько сотен мегабайт.

Как правило, каждый раз, когда строке требуется увеличить свой буфер, она выделяет новый буфер больше, чем предыдущий - есть стратегия для определения нового размера буфера. В зависимости от фактического объема доступной памяти в системе, это перераспределение может завершиться неудачно или успешно. Если это не помогло, у вас есть очень мало вариантов того, что вы можете сделать - обычно лучше всего перезапустить программу.

Для решаемой задачи - работы с COM-портом - вы можете использовать MFC :: CArray, который очень удобно использовать в качестве массива переменного размера. Вы также можете использовать std :: vector для того же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...