В общем есть код. В коде есть оператор new - выделяет соотв количество байт. В конструкторе он работает в деструкторе тоже, хотя там разрушать надо. А вот в члене класса. вызываем исключение, обращения по 0-му адресу , я окончательно запутался Вот картинка
Исходник сверхсекретен, или что? Вам вроде дали ясно понять в #3, что с таким количеством информации Вы ответа не получите.
intel_x128 Не путайте хип и стек, первый увеличивается в случае нехватки памяти. VirtualAlloc использовать абсолютно не нужно.
Немного не в тему, но либо Код (Text): memory = new (nothrow) byte[65536]; if(!memory) ... либо Код (Text): try { memory = new byte[65536]; } catch(const std::bad_alloc&) { //... } надо писать.
Booster Хип будет расширяться ровно до того момента, пока не закончатся резервные страницы. //______________________________________ PCHAR p; do { p = new char[0x100]; } while (p!=0); MessageBoxA(0, "Хип переполнен", "Ошибка", MB_OK); //______________________________________
intel_x128 Тоже самое можно написать и для VirtualAlloc, т.к. 2Гб юзермодных адресов - не резиновые PS: ТС видимо сообразил (с подачи Ezrah), что "дал Маху", вызвав метод неинициализированного объекта this=ecx=null - и ушел в подполье или монастырЪ, оставив тему на растерзание любителям плясок с бубном
intel_x128 Какие резервные страницы? Куча может расти до предела виртуальной памяти. В этом смысле VirtualAlloc и куча абсолютно равнозначны. Только куча более удобна.
При чём тут HeapAlloc? malloc и new к HeapAlloc не имеют отношения, они обращаются к своей куче, которая не подвержена никаким ограничениям. А по большому счёту разница в удобстве работы с блоками памяти разного размера.
Booster Некоторое отношение все же имеет. При запросе больших блоков malloc вызывает HeapAlloc. Этот порог регурлиуется ф-иями *_set_threshold_* (как-то так, точное название не помню). intel_x128 HeapAlloc использует VirtualAlloc как низкоуровневый механизм выделения памяти. Если совсем грубо, то при инициализации Windows-кучи запрашивается пул памяти у VirtualAlloc, а потом при обращении к HeapAlloc запрос удовлетворяется из пула.
Mika0x65 Главное что размер кучи ограничен только размером свободной памяти, а уж через HeapAlloc или как-то иначе это не суть. Наверняка есть компиляторы которые не используют никаких HeapAlloc, в линукс так точно. ^)
intel_x128 См. RtlCreateHeap, параметры CommitSize и ReserveSize + флаг HEAP_GROWABLE . А также см.HeapCreate, в которой dwInitialSize соотв.CommitSize (он же AllocSize), а dwMaximumSize - если не 0, то соотв. ReserveSize НЕ-растущей кучи, а если 0, то куча растущая и ее нач.ReserveSize берется по умолчанию (обычно = SegmentSize = 1Мб)