StringReserve

Резервирует в памяти для строки буфер указанного размера.

bool  StringReserve(
   string&    string_var,       // строка
   uint       new_capacity      // размер буфера для хранения строки
   );

Параметры

string_var

[in][out]  Строка, для которой необходимо изменить размер буфера.

new_capacity

[in]  Требуемый размер буфера под строку. Если новый размер new_capacity меньше длины строки, то размер текущего буфера не изменится.

Возвращаемое значение

В случае успешного выполнения возвращает true, иначе false. Для получения кода ошибки нужно вызвать функцию GetLastError().

Примечание

В общем случае размер строки не равен размеру буфера, предназначенному для хранения строки. Как правило при создании строки буфер под неё выделяется с запасом. Функция StringReserve() позволяет управлять размером буфера и указываеть оптимальный размер для будущих операций.

В отличие от StringInit() функция StringReserve() не изменяет содержимое строки и не заполняет её символами.

Пример:

void OnStart()
  {
   string s;
//--- проверим скорость работы без использования StringReserve
   ulong t0=GetMicrosecondCount();
   for(int i=0; i< 1024; i++)
      s+=" "+(string)i;
   ulong msc_no_reserve=GetMicrosecondCount()-t0;
   s=NULL;
//--- теперь замерим с использованием StringReserve
   StringReserve(s,1024 * 3);
   t0=GetMicrosecondCount();
   for(int i=0; i< 1024; i++)
      s+=" "+(string)i;
   ulong msc_reserve=GetMicrosecondCount()-t0;
//--- проверим время
   Print("Test with StringReserve passed for "+(string)msc_reserve+" msc");   
   Print("Test without StringReserve passed for "+(string)msc_no_reserve+" msc");         
/* Результат:
     Test with StringReserve passed for 50 msc
     Test without StringReserve passed for 121 msc
*/
  }

Смотри также

StringBufferLen, StringSetLength, StringInit, StringSetCharacter