Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функции выделения памяти 
:(
    Опции темы
knave
Дата 8.2.2005, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 6.3.2003
Где: Санкт-Питербург ( Россия)

Репутация: нет
Всего: 5



Объясните в чем разница между памятью выделенной через new или malloc и этими апи функциями GlobaAlloc LocalAlloc

Почему то во многих системных и мультимедийных приложениях используют именно последние? Чем это обусловленно.


--------------------
С наилучшими пожеланиями !!!
PM MAIL ICQ   Вверх
azesmcar
Дата 8.2.2005, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 5
Всего: 211



MSDN
Цитата
Note  The global functions are slower than other memory management functions and do not provide as many features. Therefore, new applications should use the heap functions. However, the global functions are still used with DDE, the clipboard functions, and OLE data objects.


GlobalAlloc и LocalAlloc выделяют память соответственно из глобальной и локальной кучи.

new и malloc отличаются тем что malloc не вызывает конструктор при выделении памяти для обьекта, он только выделяет память, new к тому же вызывает конструктор...

А насчет того зачем используют GlobalAlloc вместо malloc могу только догадаться...
malloc это CRT (C RunTime) функция, в итоге она вызывает тот же самый GlobalAlloc или LocalAlloc или HeapAlloc точно сказать не могу, под линукс тот же malloc работает но уже вызывает соответственно линуксовские системные вызовы (это как API).

Это сообщение отредактировал(а) azesmcar - 8.2.2005, 14:30
PM   Вверх
knave
Дата 8.2.2005, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 6.3.2003
Где: Санкт-Питербург ( Россия)

Репутация: нет
Всего: 5



malloc - скорее всего она делает память перемещаемой. Я посмотрел, везде где юзают xxxxxAlloc ставят Флаг FIXED или LPTR (FIXED | ZEROINIT). Наверное чтобы ОС непереместила куда нить кусок памяти пока ее кто то обрабатывает (чтобы ненао было делать Lock/Unlock).


--------------------
С наилучшими пожеланиями !!!
PM MAIL ICQ   Вверх
oleg1973
Дата 8.2.2005, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 1
Всего: 34



никакого malloc в winapi нет и небыло smile
делаем GlobalAlloc,GMEM_FIXED,size
и не мучаемся smile


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Fixin
Дата 8.2.2005, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



oleg1973
Цитата
делаем GlobalAlloc,GMEM_FIXED,size
Ну так почему все-таки?
PM MAIL ICQ   Вверх
oleg1973
Дата 9.2.2005, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 1
Всего: 34



Fixin
что именно почему?


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Fixin
Дата 9.2.2005, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



В чем разница для винда между new и ****Alloc. Если для простых смертных. На что влияет GMEM_. Я не пользовался раньше.
PM MAIL ICQ   Вверх
chipset
Дата 10.2.2005, 03:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 2
Всего: 165



Цитата(knave @ 8.2.2005, 02:53)
Объясните в чем разница между памятью выделенной через new или malloc и этими апи функциями GlobaAlloc LocalAlloc

new - чисто С++'овский оператор, выделяет память под класс+вызывает конструктор
malloc - устаревший оператор Си, из библиотеки CRT. Выделяет определенное кол-во памяти.
GlobalAlloc, LocaAlloc - функции Win32Api.
Цитата(knave @ 8.2.2005, 02:53)
Почему то во многих системных и мультимедийных приложениях используют именно последние? Чем это обусловленно.

malloc устаревший оператор, и использование его вместе с С++-структурой как то не очень хороший стиль..
Некоторые люди не юзают STL, и вместо этого им приходится использовать ReadFile/WriteFile из Win32Api, где удобнее и уместнее воспользоваться аналогичным оператором WinApi.
Ну и кроме того, ты же понимаешь что дополнительная цепочка вызовов функций скушает ресурсы, что нехорошо для системных и мультимедийных прилаг smile
Добавлено @ 03:27
Цитата(Fixin @ 9.2.2005, 07:43)
В чем разница для винда между new и ****Alloc. Если для простых смертных. На что влияет GMEM_. Я не пользовался раньше.

Если ты насчёт ****Alloc то там ещё есть такая фича как HeapAlloc, которая позволяет работать с кучами..


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Fixin
Дата 10.2.2005, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



Я не про то. Я про виды выделяемой памяти флагами GME_******. Каки е виды бывают и в чем разница?
PM MAIL ICQ   Вверх
_hunter
Дата 10.2.2005, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



открываем справку и читаем:
Цитата
GHND
0x0042 Combines GMEM_MOVEABLE and GMEM_ZEROINIT.
GMEM_FIXED
0x0000 Allocates fixed memory. The return value is a pointer.
GMEM_MOVEABLE
0x0002 Allocates movable memory. Memory blocks are never moved in physical memory, but they can be moved within the default heap.
The return value is a handle to the memory object. To translate the handle into a pointer, use the GlobalLock function.

This value cannot be combined with GMEM_FIXED.

GMEM_ZEROINIT
0x0040 Initializes memory contents to zero.
GPTR
0x0040 Combines GMEM_FIXED and GMEM_ZEROINIT.

;)


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Fixin
Дата 10.2.2005, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



Ну объясните, что за передвижимая память и непередвижимая.
PM MAIL ICQ   Вверх
_hunter
Дата 10.2.2005, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



опять смотрим в справку:
Цитата
Fixed memory is accessed through a regular pointer, and will never move. Movable memory is accessed through a "handle" (which is a pointer to a pointer). The Memory Manager can therefore do heap compactions of such moveable blocks simply by updating the second pointer (ie, the one pointed to by the handle). This avoids heap fragmentation, but increases program complexity as well as the risk for "interesting" bugs.



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0924 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.