В настоящее время я работаю над приложением для платформы с низким объемом памяти, для которого требуется 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 байта