Старый 01.03.2013, 23:59   #1   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Работа с памятью

Я конечно понимаю что сейчас раздел не особо популярен, но всё же если человек, который разбирается в теме прочтёт сообщение попрошу его ответит!
В литературе по программированию на с++ часто пишут что нужно использовать оператор new для работы с памятью и что malloc уже давно устарел, и с классами его использовать нельзя.
Однако если смотреть исходники Дума 3 или другие современные игровые исходники то видно что они используют оператор malloc для манипулирования с памятью. Хотя при этом активно работают с классами и другими вкусностями в C++.
Отсюда вопрос, нафига они так делают и почему не юзают malloc?
  Ответить с цитированием
Старый 02.03.2013, 05:36   #2   
highly mean
 
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35

silly вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
В литературе по программированию на с++ часто пишут что нужно использовать оператор new для работы с памятью и что malloc уже давно устарел, и с классами его использовать нельзя.
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
если смотреть исходники Дума 3
Мы точно одни и те же исходники смотрим?

Код:
ID_INLINE void *operator new( size_t s ) {
	return Mem_Alloc( s, TAG_NEW );
}
ID_INLINE void operator delete( void *p ) {
	Mem_Free( p );
}
ID_INLINE void *operator new[]( size_t s ) {
	return Mem_Alloc( s, TAG_NEW );
}
ID_INLINE void operator delete[]( void *p ) {
	Mem_Free( p );
}
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
другие современные игровые исходники
Какие например?
  Ответить с цитированием
Старый 02.03.2013, 10:21   #3   
Форумец
 
Аватар для Spectator
 
Сообщений: 39,868
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
оператор malloc для манипулирования с памятью.
malloc - это функция, а не оператор)

Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Хотя при этом активно работают с классами и другими вкусностями в C++.
Отсюда вопрос, нафига они так делают и почему не юзают malloc?
почему юзают malloc, насколько я понимаю?)))
ответ прост. malloc выделяет память в БАЙТАХ. new выделяет память в розовых слониках.
вопрос - сколько выделит памяти в байтах следующий код:

int *n = new int[10];

ответ - от 10 до 80)))
в кроссплатформенных разработках это невероятно критично. и необходимость использовать malloc - далеко не самое большое зло.
  Ответить с цитированием
Старый 02.03.2013, 13:57   #4   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от silly Посмотреть сообщение
Какие например?
Признаю свой косяк с думом, невнимательно поглядел, что они свой аллокатор используют.

Spectator, описался про malloc, конечно это же это функция))

Где можно почитать по поводу best-practices программирования на С++? Или это приходит после прочтения такие корифеев как Александриеску и Майерса?
  Ответить с цитированием
Старый 02.03.2013, 21:32   #5   
Форумец
 
Сообщений: 286
Регистрация: 17.09.2010

Battle Coder вне форума Не в сети
Spectator, контрпример?
byte *n = new byte[100500] ? внимание, сколько байт выделит?
int и правда может платформозависимый... используйте long/long long/short, если вам это критично. а ещё лучше использовать java - там эту проблему решили радикально.
  Ответить с цитированием
Старый 02.03.2013, 22:54   #6   
highly mean
 
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35

silly вне форума Не в сети
Battle Coder, это не те типы, см. http://en.cppreference.com/w/cpp/types/integer. А вообще, не мешайте Спектатору писать глупости, это довольно забавно.
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind