|
|
| Посл.отвђт | Сообщен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 |