Большой Воронежский Форум
» Программирование>Работа с памятью
Hopkroft 23:59 01.03.2013
Я конечно понимаю что сейчас раздел не особо популярен, но всё же если человек, который разбирается в теме прочтёт сообщение попрошу его ответит!
В литературе по программированию на с++ часто пишут что нужно использовать оператор new для работы с памятью и что malloc уже давно устарел, и с классами его использовать нельзя.
Однако если смотреть исходники Дума 3 или другие современные игровые исходники то видно что они используют оператор malloc для манипулирования с памятью. Хотя при этом активно работают с классами и другими вкусностями в C++.
Отсюда вопрос, нафига они так делают и почему не юзают malloc? [Ответ]
silly 05:36 02.03.2013

Сообщение от 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:
другие современные игровые исходники

Какие например? [Ответ]
Spectator 10:21 02.03.2013

Сообщение от Hopkroft:
оператор malloc для манипулирования с памятью.

malloc - это функция, а не оператор)

Сообщение от Hopkroft:
Хотя при этом активно работают с классами и другими вкусностями в C++.
Отсюда вопрос, нафига они так делают и почему не юзают malloc?

почему юзают malloc, насколько я понимаю?)))
ответ прост. malloc выделяет память в БАЙТАХ. new выделяет память в розовых слониках.
вопрос - сколько выделит памяти в байтах следующий код:

int *n = new int[10];

ответ - от 10 до 80)))
в кроссплатформенных разработках это невероятно критично. и необходимость использовать malloc - далеко не самое большое зло. [Ответ]
Hopkroft 13:57 02.03.2013

Сообщение от silly:
Какие например?

Признаю свой косяк с думом, невнимательно поглядел, что они свой аллокатор используют.

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

Где можно почитать по поводу best-practices программирования на С++? Или это приходит после прочтения такие корифеев как Александриеску и Майерса?
[Ответ]
Battle Coder 21:32 02.03.2013
Spectator, контрпример?
byte *n = new byte[100500] ? внимание, сколько байт выделит?
int и правда может платформозависимый... используйте long/long long/short, если вам это критично. а ещё лучше использовать java - там эту проблему решили радикально. [Ответ]
silly 22:54 02.03.2013
Battle Coder, это не те типы, см. http://en.cppreference.com/w/cpp/types/integer. А вообще, не мешайте Спектатору писать глупости, это довольно забавно. [Ответ]
Вверх