Задался таким вот вопросом.
Как мне известно из различных ресурсов программирования, память которую мы используем из стека, работает на порядок быстрее сегмента данных. Мне стало интересно, как лучше использовать память стека и решил поиграться с профайлером от DC:
Код, который тестировался:
Результаты:
Тестирование: <Stack> vs <Data size>
Режим: интерпретируемый, 10000x1000 итераций.
Stack: 124646
Data size: 116586
Возможно конечно есть более правильная реализация кода для теста, но исходя из вышеизложенного примера, я как таковых преимуществ в использовании памяти стека не заметил, да еще при этом массив не инициализировался. В тесте хотел уместить сразу и запись и чтение.
Вопрос 1: Получается если мне нужно выводить диалог размером, скажем 2048*4 байт, то мне лучше отдать предпочтение сегменту данных?
Вопрос 2: Получается, лучше изначально выделить память в сегменте данных, скажем размерами 144, 256, 512... и уже пользоваться данной памятью, нежели постоянно выделять память в стеке?
UPD: Дополнение:
Какой из этих вариантов, будет лучше использовать?
stock OptionOne(playerid) { new string[2048]; for(new i; i < 128; i++) { } return 1; } new String_2048[2048]; stock OptionTwo(playerid) { String_2048[0] = EOS; for(new i; i < 128; i++) { } return 1; }