tag:blogger.com,1999:blog-1688132520265708820.post7027509168489258488..comments2023-04-02T16:52:35.787+03:00Comments on Блог GunSmoker-а (переводы): В чём разница между LocalAlloc и GlobalAlloc?GunSmokerhttp://www.blogger.com/profile/15611696588191431330noreply@blogger.comBlogger8125tag:blogger.com,1999:blog-1688132520265708820.post-84108252959250720902014-01-13T17:29:03.733+04:002014-01-13T17:29:03.733+04:00Алексей, интересная статья по истории. А текущая с...Алексей, интересная статья по истории. А текущая ситуация описывается двумя абзацами из <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa366533(v=vs.85).aspx" rel="nofollow">MSDN</a><br /><br />Starting with 32-bit Windows, GlobalAlloc and LocalAlloc are implemented as wrapper functions that call HeapAlloc using a handle to the process's default heap. Therefore, GlobalAlloc and LocalAlloc have greater overhead than HeapAlloc. <br /><br />Because the different heap allocators provide distinctive functionality by using different mechanisms, you must free memory with the correct function. For example, memory allocated with HeapAlloc must be freed with HeapFree and not LocalFree or GlobalFree. Memory allocated with GlobalAlloc or LocalAlloc must be queried, validated, and released with the corresponding global or local function.<br />Антон Щировhttps://www.blogger.com/profile/11206759594234220515noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-84669247455506480622014-01-07T06:30:28.441+04:002014-01-07T06:30:28.441+04:00Я повторю вопрос: почему бы не написать, где я оши...Я повторю вопрос: почему бы не написать, где я ошибся? К примеру: "вот здесь Реймонд Чен написал X, вы перевели это как Y, хотя правильнее было бы перевести это как Z". Пока я совершенно не понимаю, что вы хотите сказать.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-12890128719030453752014-01-05T23:04:25.951+04:002014-01-05T23:04:25.951+04:00А если прочесть в msdn получается совсем интересно...А если прочесть в msdn получается совсем интересно:<br /><br />Windows memory management does not provide a separate local heap and global heap, as 16-bit Windows does. As a result, the global and local families of functions are equivalent and choosing between them is a matter of personal preference. Note that the change from a 16-bit segmented memory model to a 32-bit virtual memory model has made some of the related global and local functions and their options unnecessary or meaningless. For example, there are no longer near and far pointers, because both local and global allocations return 32-bit virtual addresses.<br /><br />Получется что GlobalAlloc и LocalAlloc в 16 битных версиях Windows производили разделение между сегментами памяти локальной и глобальной кучи. Очевидно<br />что в win16 куча подразделялась на глобальную и локальную занимая соответственно либо один сегмент вместе с процессом(локальная)<br />тогда доступ к памяти происходил примерно так mov eax,dword ptr[VasyaArray],или специальный глобальный сегмент кучи- в этом случае данные между процессами расшаривались и доступ должен был производиться с помощью дальних указателей:<br />разница между указателями отлично показана тут:<br />http://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8_Intel_x86<br /><br />, очевидно что Win32 локальная и глобальная функции суть одно и тоже, поскольку доступ к памяти FLAT плоская <br />тут подробно:<br />http://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8_Intel_x86<br />Нет никакой разницы, как организован указатель. .<br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-37360545391873114492014-01-05T22:46:54.497+04:002014-01-05T22:46:54.497+04:00Дело том, что GlobalAlloc возвращает дескриптор в...Дело том, что GlobalAlloc возвращает дескриптор в неком ассоциативном списке памяти,<br />HGLOBAL hGlob =GlobalAlloc(GPTR | GMEM_SHARE,<br /> sizeof(ClrBuffer));<br />а вот GlobalLock () - возвращает указатель. Примерно так.<br />Image->Pixels = reinterpret_cast(GlobalLock(hGlob));<br />А если ещё точнее <br />http://www.vsokovikov.narod.ru/New_MSDN_API/Compatibility_16_32/fn_globallock.htm<br />(В линейках ОС Windows NT и 9x не используется)<br />Зачем вообще о ней писать?<br /><br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-68063677839526967812014-01-05T21:41:51.752+04:002014-01-05T21:41:51.752+04:00Для начала ну чтобы понять просто с чем имеете дел...Для начала ну чтобы понять просто с чем имеете дело, Попробуйте прочитать чтонибудь о таблице gdt регистрах селекторах , которые к слову появились уже вместе с защищённым режимом процессора и содержат в себе теневые 48 битные регистры (в 32 битных процессорах). Потом сравните Global Alloc с VirtalAlloc <br />Это очень поможет в ваших изысканиях:)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-9556644423528447522013-10-04T14:21:49.373+04:002013-10-04T14:21:49.373+04:00Этот комментарий был удален автором.Anonymoushttps://www.blogger.com/profile/05289392759049684020noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-30399617841375605762013-09-08T17:45:08.473+04:002013-09-08T17:45:08.473+04:00Почему бы просто не написать, где я ошибся? :)Почему бы просто не написать, где я ошибся? :)GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1688132520265708820.post-53578918833060231282013-09-08T15:45:41.316+04:002013-09-08T15:45:41.316+04:00Здравствуйте! Скажите пожалуйста, Вы сами знали пр...Здравствуйте! Скажите пожалуйста, Вы сами знали предметную область данной статьи, когда начали перевод, или же Вы просто перевели всё так как есть? К предметной области я бы отнёс ассемблер, эволюцию моделей памяти, селекторы, преобразование адреса, страничное и сегментное преобразования? Вы сами когда-нибудь создавали сегменты, обращались к ним? Просто данная статья сильно специфична и Раймонд Чен, её автор, знает о чём пишет, а Вы переводите её, снижая качество статьи на уровне терминологии, что у меня вызывает недоверие. Я думаю, именно потому, что Вы не совсем знаете предметную область. Могу поправить, если позволите.Anonymousnoreply@blogger.com