|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 16, 2004 23:26:34 А какая разница между памятью выделяемой HeapAlloc, GlobalAlloc(GPTR,...) и VirtualAlloc ??? |
|
|
Дата: Ноя 17, 2004 02:08:04 Разница только в том, как ей управляет ось, т.е. в том предназначении на которое она ориентированна. Например HeapAlloc относится к функциям поддержки кучи. Кучи сами по себе ориентированы на более эффективное использование памяти, когда она требуется для множества мелких объектов (хотя, насколько я знаю, эта эффективность под вопросом). Механизм куч является как бы надстройкой над механизмом виртуальной памяти (к этому механизму относится функции – VirtualXXXX (например: VirtualAlloc)). Функции из семейства GlobalXXXX (например: GlobalAlloc) считаются устаревшими, и по словам Microsoft, поддерживаются для обратной совместимости (хотя некоторые задачи без использования этих функций не выполнить). Механизм виртуальной памяти ориентирован на более эффективное управление большими объектами. Таким образом, подводя итог, скажу: память, выделенная из куч отличается от памяти, выделенной напрямую из виртуальной памяти предполагаемым (но не обязательным) назначением, гранулярностью ее выделения и скоростью работы функций, которые ей управляют. Чем в точности отличаются работа семейства функций VirtualXXXX от GlobalXXXX я не знаю (кроме эффективности). З.Ы.: Надеюсь не много наврал… |
|
|
Дата: Ноя 17, 2004 08:54:41 Кто то тут про кашу, говорил и тонко подмеченные мысли! Так вот если бы я сидел сложа руки, то до сих пор бы думал, а что такое указатель вместо того, что в аттаче! :) Такое пусть дельфиец набацает и я погляжу где сила! Теперь о том что я называю виртуальным адресным пространством. Есть Адресное Пространство Процесса(апп) 4 ГБ для вин32. И при каждом запущенном процессе ему отводится свое АПП, так вот оконечное количество байт то должно быть?! А вот скоко всего байт можно выделить под все возможные АПП я считаю Виртуальным Адресным Пространством. Возможно жутко ошибаюсь, так поправьте. Теперь что понял о ДП в текущий момент в ОЗУ, уже часть занято, а часть нет и вот эта часть как я понял и есть ДП. Так как каждый раз она меняется и то что оно будет в каждый момент одинакового размера говорить нельзя! А ДП это количество байт во вставленной сейчас ОЗУ. ТАК? 1383958627__pointer.cpp |
|
|
Дата: Ноя 17, 2004 09:28:01 EvilsInterrupt > Кто то тут про кашу, говорил и тонко подмеченные мысли! А ты не обижайся ;-) Но впечатление такое действительно складывается, как оказалось не у меня одного ;-) |
|
|
Дата: Ноя 17, 2004 10:37:10 >Такое пусть дельфиец набацает и я погляжу где сила! Не кичись! IMHO любую задачу можно реализовать любым языком программирования. Вопрос стоит о времени написания программы. 2EvilsInterrupt Не буду голословным - смотри аттач. _1015984048__pointer.dpr |
|
|
Дата: Ноя 17, 2004 10:41:15 EvilsInterrupt Не спорь. Каши много. Что до Виртуального Адресного Пространства, - да, ты действительно жутко ошибаешься, если думаешь, что операционной системе где-то обломалось дофига гигабайт свободной памяти, и она щедро по 4Гб раздает ее процессам, а все остальное - куча. Broken Sworda ты читал? Я тоже нет :) Пойду читать, и тебе того же советую. До шестой главы включительно - как минимум. Половина вопросов отпадет сама собой. |
|
|
Дата: Ноя 17, 2004 16:00:06 Приступаю к вопросу №2: Есть const int * pAge = new int; за тем чтобы в эту память ни че было записано, кто следит: компилятор или винда во время выполнение кода? а если: int * * const pAge = new int этот указатель нельзя изменить до компиляции или во вовремя работы кода тоже? |
|
|
Дата: Ноя 17, 2004 17:10:27 >за тем чтобы в эту память ни че было записано, кто следит: компилятор или винда во время выполнение кода? компилятор >этот указатель нельзя изменить непонятен вопрос. Если идёт речь о значении указателя, то можно |
|
|
Дата: Ноя 17, 2004 18:51:31 Есть const int * pAge = new int; Что это за шедевр? int * * const pAge = new int А вот от этого у меня вообще глаза на лоб вылезли! 8-() |
|
|
Дата: Ноя 17, 2004 19:26:05 Ну нету в Винде опреатора new. Поэтому каждый new компилируется в xxxxAlloc. |
|
|
Дата: Ноя 17, 2004 21:21:24 · Поправил: Oleg_SK Turkish Поэтому каждый new компилируется в xxxxAlloc. Я думаю что это не обязательно так... Все зависит от компилятора: как это в нем реализованно. Место может также выделяться не в куче, а на стеке... |
|
|
Дата: Ноя 17, 2004 22:00:19 Oleg_SK >Я думаю что это не обязательно так... Все зависит от компилятора: как это в нем реализованно. ну, компиляторы все же пишут не от балды, а худо-бедно придерживаясь стандарта. |
|
|
Дата: Ноя 17, 2004 22:56:25 @@@@ @@@@ @@@@ @@@@ @ @ @ @ @@@ @ @ @@@@@ @ @ @@@@@
@ @@@@@@@ @ @ @ @ @ @ @ @ @ @ @@ @@ @ @ @ @
@ @@ @@ @ @ @ @ @ @ @ @ @ @@@ @ @ @ @ @ @ @
@@ @ @ @@@@ @ @ @@@@ @ @@ @@@@ @ @ @ @ @@@ @
@ @ @ @ @ @ @ @@ @ @ @ @ @ @ @ @
@ @@ @ @ @ @ @ @ @ @@@ @ @ @ @@ @
@ @@@ @ @ @
@@@ @@@ @ @
@@@@ @@@ @@@@ @ @@ @@ @@@@@@@ @@@@
@ @ @ @ @@ @@ @@ @@ @ @ @ @
@ @@ @@@ @ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @ @ @
@ @@ @@ @ @ @ @ @ @ @
@ @@ @ @ @ @ @ @ @ @
@@ @@@ @@@ @ @ @ @ @ @ @
@@@@@@@@@ @ @ @ @ @ @ @
@@ @@ @ @ @ @ @ @ @
@ @ @ @ @@ @@ @@ @@ @ @
@@ @@ @@ @@ @ @ @
:-) |
|
|
Дата: Ноя 17, 2004 23:04:01 :))))))))))))))))))))))))))))))) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.080 |