| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Строки, константы, память |
| Автор: tofreesky 21.6.2010, 03:48 |
| Как сделать что бы у скомпилированной программы память расходовалась рациональнее? Например: struct abc{ char a[300]; int b; }; const struct abc arr[] = { {"abcde",0}, {"abcdef",4}, ... }; При увеличении кол-ва эллементов массива arr, размер откомпилированной программы возрастает в разы. Как сделать что бы при компилировании, для каждого эллемента выделялось не 300 символов, а столько сколько нужно? |
| Автор: borisbn 21.6.2010, 06:20 |
| Использовать std::string, а не char[300] для Си++ или char* для Си и выделять памсть динамически через malloc/free |
| Автор: Dem_max 21.6.2010, 08:39 | ||||||||||
не делать статическую инициализацию данных на стадии компиляции как вот это
или это
заполнять данные структуры нужно в ручную и во время исполнения кода программы
Тогда твой EXE не будет разрастаться. |
| Автор: tofreesky 21.6.2010, 13:01 |
| Мне не нужно заполнять структуры динамически, мои структуры, это константные структуры. Проблема лишь в том что бы скомпилированные константные структуры расходвали память рационально. Добавлено через 9 минут и 8 секунд Это такая оптимизация новая? GCC компилятор, при компиляции вроде если нашел в исходном коде, одинаковые строковые константы, и в разных местах должны быть указатели, то они пишет только один экземпляр строки и указывает адрес на нее везде. Это я беглым просмотром в HEX редакторе выяснил, ВРОДЕ. Так может быть? Такая оптимизация где-то применяется? |
| Автор: Dem_max 21.6.2010, 13:28 | ||
Так они у тебя и расходуются рационально, практически. Нужно только структуру выровнять по границе 1 байта |
| Автор: tofreesky 21.6.2010, 13:36 |
| Я сделал, как сказали в третьем сообщении, сам что-то не догадался до этого. |