Отсылка жирного HTTP-запрсоа
#1

Подкосила меня жизнь, внезапно нужно написать небольшой кусок кода.

Я вкратце почитал стандарт Pawn (совсем мельком) и быстро не нашёл как и где выделяется память при использовании оператора new. Тем не менее, мне нужно сформировать большой массив данных и отправить их по HTTP.
При задании размера массива в 4096 (байт же?) этот ваш странный интерпретатор очень странно себя ведёт, не выполняя ничего (есть у меня предположение, что я стек таким образом переполняю). Тогда вопрос -- есть ли возможность в каком-то heap'е, если он вообще есть, выделять место?

Или же простой скриптовый язык никак не подразумевает работу с памятью?

Прошу прощения, что не уделил достаточного времени на изучение стандарта, совсем времени свободного нет.
Писать плагин, конечно, можно, но не хочется.

Спасибо.
Reply
#2

Память выделяется из стека. Размер стека можно увеличить так: #pragma dynamic количество_байт

Если речь о new array[4096], то это 4096 ячеек по 4 байта, а не 4096 байт (т.е. 4096 * 4 = 16384).
Reply
#3

Спасибо.

Отлично, а 4 байта -- это по размеру int'а на целевой системе?
Но да ладно, string'и умеют паковаться, верно, судя по стандарту.
Оно нормально работает (или работает ли вообще) на данной версии Pawn-интерпретатора?

Ну и главный таки вопрос был -- а в heap'е-то мы можем выделять что-нибудь?
16 килобайт мне всё равно не хватит.
Reply
#4

Создавай эту переменную глобально, ничего выделять не придётся. Но если ты имеешь ввиду выделение памяти динамически, то нет, без сторонних плагинов ничего не выйдет.
Запаковка работает нормально.
Reply
#5

Quote:
Originally Posted by ZiGGi
Посмотреть сообщение
Создавай эту переменную глобально, ничего выделять не придётся. Но если ты имеешь ввиду выделение памяти динамически, то нет, без сторонних плагинов ничего не выйдет.
Запаковка работает нормально.
Без плагинов можно, но достаточно медленно всё это при больших объёмах.
https://sampforum.blast.hk/showthread.php?tid=137501
Reply
#6

Quote:
Originally Posted by White_116
Посмотреть сообщение
Без плагинов можно, но достаточно медленно всё это при больших объёмах.
https://sampforum.blast.hk/showthread.php?tid=137501
*property - это не то, я имел ввиду что-то вроде этого: https://sampforum.blast.hk/showthread.php?tid=451381
Reply
#7

Чо-т жесть какая-то.

Мне нужно отправить жирный запрос -- дамп БД (не спрашивайте, зачем). 200 символов в среднем на запись в БД (с учётом, что все unicode-символы подверглись urlencode'у) -- получается уже 800 байт, то есть чёрт побери 1 килобайт на запись. Записей -- допустим, 5к. 5 мегабайт в оперативной памяти, которая отжирает глобальная переменная -- это жесть.
Reply
#8

Quote:
Originally Posted by ZaR
Посмотреть сообщение
Чо-т жесть какая-то.

Мне нужно отправить жирный запрос -- дамп БД (не спрашивайте, зачем). 200 символов в среднем на запись в БД (с учётом, что все unicode-символы подверглись urlencode'у) -- получается уже 800 байт, то есть чёрт побери 1 килобайт на запись. Записей -- допустим, 5к. 5 мегабайт в оперативной памяти, которая отжирает глобальная переменная -- это жесть.
Это же одноразовый запрос? Да и разве 5 мегабайт это много? 2015 на дворе.

P.S. Выглядит так, как будто ты хочешь FS'ом утащить базу -_-
Reply
#9

Одноразовый-то одноразовый, только если ты делаешь глобальную переменную, нет особой разницы -- будешь ты её 1 раз использовать или 10 -- 5 мегабайт съедены.

2015-то на дворе, но жить и без гарбажколлектора, и без ручного выделения и очистки памяти -- как-то не оч в императивном языке.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)