В настоящее время я работаю над приложением для платформы с низкой памятью, для которой требуется std:: set из множества коротких строк ( > 100 000 строк по 4-16 символов). Я недавно перевел этот набор из std::string в const char *, чтобы сохранить память, и мне было интересно, действительно ли я избегаю всех этих накладных расходов на строку.
Я попытался использовать следующее:
std::string sizeTest = "testString";
std::cout << sizeof(sizeTest) << " bytes";
Но он просто дал мне вывод из 4 байтов, указав, что строка содержит указатель. Мне хорошо известно, что строки хранят свои данные в char * внутренне, но я думал, что класс string будет иметь дополнительные накладные расходы.
Указывает ли реализация GCC std::string больше накладных расходов, чем sizeof (std::string)? Что еще более важно, важно ли это для этого размера набора данных?
Ниже приведены размеры соответствующих типов на моей платформе (32-разрядные и 8 бит на каждый байт):
char: 1 байт
void *: 4 байт
char *: 4 байт
std::string: 4 байта