· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Динамические массивы

Посл.отвђт Сообщенiе


Дата: Май 21, 2003 14:08:05

Меня интересует следующий вопрос как представляются динамические массивы
(те размер которых можно изментять в программе)
внутри ехе. К примеру оператор басика Redim, что он делает на самом деле (Вызывает GlobalAlloc или что-то типа этого). И еще один вопрос по массивам. Объявление массива в программе (статического) к примеру состоящего из 10000 переменных типа Int будет вызывать увеличение размера выходной программы или нет. И если нет то почему???.


Дата: Май 21, 2003 14:37:01

Меня интересует следующий вопрос как представляются динамические массивы
(те размер которых можно изментять в программе)
внутри ехе.

в каждой реализации по-разному. std::vector тоже динамический массив. и std::map тоже можно рассматривать как динамический массив. А можно написать свою реализацию а-ля Richter ( используя флаги страниц )
И еще один вопрос по массивам. Объявление массива в программе (статического) к примеру состоящего из 10000 переменных типа Int будет вызывать увеличение размера выходной программы или нет. И если нет то почему да уж.... интересно а самому попробовать - никак? действительно бесят такие вопросы.


Дата: Май 21, 2003 19:15:30

Кстати, насчет vector - если посмотреть в исходный код SТL - можно понять что реализация vectora сделана через Linked-List. Не надо мне такой vector... только Page Faults будет генерировать. Известно, ведь, что если блоки памяти выделены по одному, а не сразу - это замедляет код.


Дата: Май 21, 2003 19:26:06

Первый блок массива берется через GlobalAlloc(), а последующие - через GlobalReAlloc(). И лучше держать число аллоцированных елементов массива вместе с числом занятых - будет меньше аллокаций. Допустим, аллоцировать по 32 елемента, таким образом, если нужно добавить 128 елементов - только 4 аллокации будет сделано, вместо 128.

Еще лучше использовать HeapAlloc(),HeapReAlloc(). Global_xxx() немного медленнее.


Дата: Май 22, 2003 09:27:32

Спасибо!


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.064