std :: строковая реализация в GCC и ее накладные расходы на память для коротких строк

В настоящее время я работаю над приложением для платформы с низким объемом памяти, для которого требуется std :: set из множества коротких строк (> 100 000 строк по 4-16 символов каждая). Я недавно перевел этот набор из std :: string в const char * для экономии памяти, и мне было интересно, действительно ли я избегаю таких больших накладных расходов на строку.

Я пробовал использовать следующее:

std::string sizeTest = "testString";
std::cout << sizeof(sizeTest) << " bytes";

Но это просто дало мне вывод 4 байта, указывающий, что строка содержит указатель. Я хорошо знаю, что строки хранят свои данные в char * внутри, но я думал, что у строкового класса будут дополнительные накладные расходы.

Несет ли реализация GCC std :: string больше накладных расходов, чем можно было бы указать sizeof (std :: string)? Что еще более важно, является ли он значительным по сравнению с этим размером набора данных?

Вот размеры соответствующих типов на моей платформе (он 32-битный и имеет 8 бит на байт):

char: 1 bytes
void *: 4 байта
char *: 4 байта
std :: string: 4 байта

20
задан Wheatevo 20 February 2011 в 17:52
поделиться