PDA

Просмотр полной версии : [Вопрос] Память сервера (stack size, heap size, data size, code size)



Profyan
20.02.2014, 14:01
Всем привет.Меня недавно заинтересовали строки в pawno :
Header size: 9068 bytes - Это вроде бы память потраченная на индексы и еще что то пабликов.(если нет - поправьте)
Code size: 909660 bytes - Хотелось бы узнать про это.
Data size: 957928 bytes - Про это тоже.Поподробнее если можно :)
Stack/heap size: 16384 bytes; estimated max. usage=3554 cells (14216 bytes) - ну это как я знаю память стека/потраченная память.
Total requirements: 1893040 bytes - И это наверное сумма всех значений выше..


1.Расскажите пожалуйста поподробнее об этих строчках.
2.#pragma dynamic увеличивает только память стека?
3.Что нужно делать, чтобы уменьшить значение во 2ой и 3ей строчке?
4.И влияет ли 1-3 строчки на оптимизацию, и на что они вообще влияют?!

Заранее спасибо!

Daniel_Cortez
20.02.2014, 17:57
Header size - размер заголовка AMX. Обычно там находится таблица экспортируемых public-функций и переменных.
Data size - размер данных (переменные и константы).
Code size - размер кода. Если конкретнее, то это размер сгенерированных инструкций AMX, так что не пытайся в .pwn умещать весь код в одну строку - компилятору плевать на то, как написан исходный код.
Stack/heap size - объём памяти, выделяемой под стек. Обычно под стек выделяется 16384 байта (16 Кб). Если использовать директиву #pragma dynamic, под стек будет выделяться столько байт, сколько указано в директиве, но в твоём случае это не требуется, т.к. рассчитанное компилятором максимальное использование стека меньше порога в 16384 (14216 bytes).

Всё это влияет на общий объём памяти, используемой сервером. Разумеется, нужно всегда стремиться к тому, чтобы этот объём был как можно меньше, т.к. некоторые хостинги могут не потянуть всякие RLS с 100500 Мб памяти в Total requirements. А для этого нужно и из переменных мусор убирать, и говнокод переписывать, много чего.

Edwin
20.02.2014, 18:15
Переполнена память стэка.
Мой совет (скорее всего единственный верный для этого случая, да поправят меня опытнейшие): уменьшай числа в значениях переменных, в частности "new", так как стэк заполняется неиспользуемыми ячейками. Подсчитывай все размеры переменных и выставляй их желательно по размеру, и не забывай +1 ячейку под нулевое значение.

Profyan
20.02.2014, 19:12
Спасибо,теперь буду писать код для меня понятным, а не супер сжатым и неразборчивым!

Salvacore
23.02.2014, 07:35
Закрыто.