Posts: 157
Threads: 15
Joined: Sep 2009
Reputation:
0
Подкосила меня жизнь, внезапно нужно написать небольшой кусок кода.
Я вкратце почитал стандарт Pawn (совсем мельком) и быстро не нашёл как и где выделяется память при использовании оператора new. Тем не менее, мне нужно сформировать большой массив данных и отправить их по HTTP.
При задании размера массива в 4096 (байт же?) этот ваш странный интерпретатор очень странно себя ведёт, не выполняя ничего (есть у меня предположение, что я стек таким образом переполняю). Тогда вопрос -- есть ли возможность в каком-то heap'е, если он вообще есть, выделять место?
Или же простой скриптовый язык никак не подразумевает работу с памятью?
Прошу прощения, что не уделил достаточного времени на изучение стандарта, совсем времени свободного нет.
Писать плагин, конечно, можно, но не хочется.
Спасибо.
Posts: 1,311
Threads: 39
Joined: Mar 2012
Reputation:
0
Память выделяется из стека. Размер стека можно увеличить так: #pragma dynamic количество_байт
Если речь о new array[4096], то это 4096 ячеек по 4 байта, а не 4096 байт (т.е. 4096 * 4 = 16384).
Posts: 157
Threads: 15
Joined: Sep 2009
Reputation:
0
Спасибо.
Отлично, а 4 байта -- это по размеру int'а на целевой системе?
Но да ладно, string'и умеют паковаться, верно, судя по стандарту.
Оно нормально работает (или работает ли вообще) на данной версии Pawn-интерпретатора?
Ну и главный таки вопрос был -- а в heap'е-то мы можем выделять что-нибудь?
16 килобайт мне всё равно не хватит.
Posts: 1,659
Threads: 17
Joined: Sep 2008
Создавай эту переменную глобально, ничего выделять не придётся. Но если ты имеешь ввиду выделение памяти динамически, то нет, без сторонних плагинов ничего не выйдет.
Запаковка работает нормально.
Posts: 1,659
Threads: 17
Joined: Sep 2008
Quote:
Originally Posted by White_116
|
*property - это не то, я имел ввиду что-то вроде этого:
https://sampforum.blast.hk/showthread.php?tid=451381
Posts: 157
Threads: 15
Joined: Sep 2009
Reputation:
0
Чо-т жесть какая-то.
Мне нужно отправить жирный запрос -- дамп БД (не спрашивайте, зачем). 200 символов в среднем на запись в БД (с учётом, что все unicode-символы подверглись urlencode'у) -- получается уже 800 байт, то есть чёрт побери 1 килобайт на запись. Записей -- допустим, 5к. 5 мегабайт в оперативной памяти, которая отжирает глобальная переменная -- это жесть.
Posts: 1,659
Threads: 17
Joined: Sep 2008
Quote:
Originally Posted by ZaR
Чо-т жесть какая-то.
Мне нужно отправить жирный запрос -- дамп БД (не спрашивайте, зачем). 200 символов в среднем на запись в БД (с учётом, что все unicode-символы подверглись urlencode'у) -- получается уже 800 байт, то есть чёрт побери 1 килобайт на запись. Записей -- допустим, 5к. 5 мегабайт в оперативной памяти, которая отжирает глобальная переменная -- это жесть.
|
Это же одноразовый запрос? Да и разве 5 мегабайт это много? 2015 на дворе.
P.S. Выглядит так, как будто ты хочешь FS'ом утащить базу -_-
Posts: 157
Threads: 15
Joined: Sep 2009
Reputation:
0
Одноразовый-то одноразовый, только если ты делаешь глобальную переменную, нет особой разницы -- будешь ты её 1 раз использовать или 10 -- 5 мегабайт съедены.
2015-то на дворе, но жить и без гарбажколлектора, и без ручного выделения и очистки памяти -- как-то не оч в императивном языке.