![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Как сделать что бы у скомпилированной программы память расходовалась рациональнее?
Например: struct abc{ char a[300]; int b; }; const struct abc arr[] = { {"abcde",0}, {"abcdef",4}, ... }; При увеличении кол-ва эллементов массива arr, размер откомпилированной программы возрастает в разы. Как сделать что бы при компилировании, для каждого эллемента выделялось не 300 символов, а столько сколько нужно? |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Использовать std::string, а не char[300] для Си++ или char* для Си и выделять памсть динамически через malloc/free
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 10 Всего: 146 |
||||
|
||||
Dem_max |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
не делать статическую инициализацию данных на стадии компиляции как вот это
или это
заполнять данные структуры нужно в ручную и во время исполнения кода программы
Тогда твой EXE не будет разрастаться. Это сообщение отредактировал(а) Dem_max - 21.6.2010, 08:41 -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
||||||||||
|
|||||||||||
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Мне не нужно заполнять структуры динамически, мои структуры, это константные структуры.
Проблема лишь в том что бы скомпилированные константные структуры расходвали память рационально. Добавлено через 9 минут и 8 секунд Это такая оптимизация новая? ![]() GCC компилятор, при компиляции вроде если нашел в исходном коде, одинаковые строковые константы, и в разных местах должны быть указатели, то они пишет только один экземпляр строки и указывает адрес на нее везде. Это я беглым просмотром в HEX редакторе выяснил, ВРОДЕ. Так может быть? Такая оптимизация где-то применяется? |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
Так они у тебя и расходуются рационально, практически. Нужно только структуру выровнять по границе 1 байта -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Я сделал, как сказали в третьем сообщении, сам что-то не догадался до этого.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |