Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
Работа с памятью |
Философия, технологии, алгоритмы! |
|
Опции темы |
01.03.2013, 23:59 | #1 |
Registered User
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56
Не в сети |
Работа с памятью
Я конечно понимаю что сейчас раздел не особо популярен, но всё же если человек, который разбирается в теме прочтёт сообщение попрошу его ответит!
В литературе по программированию на с++ часто пишут что нужно использовать оператор new для работы с памятью и что malloc уже давно устарел, и с классами его использовать нельзя. Однако если смотреть исходники Дума 3 или другие современные игровые исходники то видно что они используют оператор malloc для манипулирования с памятью. Хотя при этом активно работают с классами и другими вкусностями в C++. Отсюда вопрос, нафига они так делают и почему не юзают malloc? |
02.03.2013, 05:36 | #2 | |
highly mean
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35
Не в сети |
Цитата:
Код:
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 ); } |
|
02.03.2013, 10:21 | #3 | |
Форумец
Сообщений: 39,868
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
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
Не в сети |
Признаю свой косяк с думом, невнимательно поглядел, что они свой аллокатор используют.
Spectator, описался про malloc, конечно это же это функция)) Где можно почитать по поводу best-practices программирования на С++? Или это приходит после прочтения такие корифеев как Александриеску и Майерса? |
02.03.2013, 21:32 | #5 |
Форумец
Сообщений: 286
Регистрация: 17.09.2010
Не в сети |
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
Не в сети |
Battle Coder, это не те типы, см. http://en.cppreference.com/w/cpp/types/integer. А вообще, не мешайте Спектатору писать глупости, это довольно забавно.
|