У меня есть проблема с памятью моего приложения C99, которое загружает много строк. У меня верхняя границы для длины строки, и я в принципе сделать что-то вроде этого (это утверждение в цикле):Оптимизация размера памяти и производительности
char* input = (char*)malloc(sizeof (char)* MAX_CHAR_INPUT_SIZE);
scanf_s("%s", input, MAX_CHAR_INPUT_SIZE);
Как вы можете видеть, если строка обеспечивается пользователем мала много памяти впустую. Моя единственная идея состоит в том, чтобы скопировать эту строку, после чтения, в нужный блок памяти, а затем освободить большую. Это хороший подход? (Я знаю, что это будет O (N)).
Также может кто-нибудь объяснить мне, как это решается на языках более высокого уровня? (например, C# Console.Read())
на других языках действительно распространен, чтобы рассмотреть тип строки, связанной с переменной как экземпляр с неизменяемым состоянием, что означает, что если пользователю необходимо изменить состояние (отредактировать строку или связать другую с заданной переменной) строки, создается новая строка (логика создания новой строки, очевидно, зависит от того, что делает пользователь) и прикрепляется к метке; это почти так, как это происходит. – user2485710
Другие языки, которые имеют изменяемые строки (например, StringBuilder, который иногда используется для повышения эффективности), начинаются с небольшого размера и затем при необходимости увеличивают его. – immibis
в C++ строки являются изменяемыми и предположительно растут экспоненциально в два раза. – Julius