|
Результаты опроса: Используете ли вы свои реализации new\delete?
|
Да
|
|
3 |
23.08% |
Нет
|
|
10 |
76.92% |
16.04.2012, 21:05
|
#1
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Управление памятью.
Используете ли вы свои реализации операторов new и delete, new[] и delete[]?
Опрос открытый.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
16.04.2012, 21:20
|
#2
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Управление памятью.
зависит от задачи.
если много каких-то объектов создаются/удаляются в рантайме, то предпочитаю один раз выделить под них фиксированные пулы.
имхо, в идеале - все new должны быть на инициализации игры, все delete на выходе из игры. во время игры можно обходиться и без них.
|
(Offline)
|
|
16.04.2012, 21:53
|
#3
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Управление памятью.
Сообщение от Mr_F_
зависит от задачи.
если много каких-то объектов создаются/удаляются в рантайме, то предпочитаю один раз выделить под них фиксированные пулы.
имхо, в идеале - все new должны быть на инициализации игры, все delete на выходе из игры. во время игры можно обходиться и без них.
|
Ну мне интересен именно аспект: использование нестандартных реализаций new/delete
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
16.04.2012, 22:38
|
#4
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: Управление памятью.
Ну мне интересен именно аспект: использование нестандартных реализаций new/delete
|
Проголосовал за нет. Я еще ни разу не видел необходимости писать свои new\delete. Ну разве что их можно использовать для сборщика мусора и т.п. Если беспокоят утечки памяти, то стоит использовать Visual Leak Detector чем городить что-то непонятное самому( ну или возможности CRT использовать ).
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.04.2012, 23:24
|
#5
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Управление памятью.
Ну мне интересен именно аспект: использование нестандартных реализаций new/delete
|
перегружать смысла особо не вижу. т.е. это понятно что можно делать, только если у тебя уже гора кода с new/delete, и надо поменять политику работы с памятью ВДРУГ.
при этом через месяц уже можешь забыть где перегружено, где нет, и гадай как оно работает.
так что, имхо, - если выделяешь память нестандартным образом, то выделяй это читабельным путём, типа mem = myPool.Allocate(size).
---
проголосовал "нет", но приврал - изменял new/delete для классов, которые обязаны были быть выравнены (внутри был _aligned_malloc)
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
|
|
29.04.2012, 21:31
|
#6
|
|
Ответ: Управление памятью.
пишу, хотя это не совсем корректно называть каноничным переопределением new\delete
void AddPointer(void * pointer, const char * fileName, unsigned int lineNum, unsigned char type, unsigned int size);
void RemovePointer(void * pointer, const char * fileName, u32 lineNum, u8 type);
void * Allocate(size_t size);
void * ReAllocate(void * pointer, size_t size);
void Free(void * pointer);
#define MM_NEW(__var, __obj) \
{ \
__var = new __obj; \
AddPointer(__var, __FILE__, __LINE__, 0, sizeof(__obj)); \
}
#define MM_NEW_S(__obj) \
{ \
void * __ptr = new __obj; \
AddPointer(__ptr, __FILE__, __LINE__, 0, sizeof(__obj)); \
}
#define MM_DELETE(__var) \
{ \
RemovePointer(__var, __FILE__, __LINE__, 0); \
delete(__var); \
}
#define MM_NEW_A(__var, __obj, __count) \
{ \
__var = new __obj [__count]; \
AddPointer(__var, __FILE__, __LINE__, 1, sizeof(__obj) * __count); \
}
#define MM_NEW_S_A(__obj, __count) \
{ \
void * __ptr = new __obj [__count]; \
AddPointer(__ptr, __FILE__, __LINE__, 1, sizeof(__obj) * __count); \
}
#define MM_DELEMM_A(__var) \
{ \
RemovePointer(__var, __FILE__, __LINE__, 1); \
delete [] (__var); \
}
#define MM_NEW_P(__var, __ptr, __obj) \
{ \
__var = new (__ptr) __obj; \
AddPointer(__ptr, __FILE__, __LINE__, 2, sizeof(__obj)); \
}
#define MM_NEW_S_P(__ptr, __obj) \
{ \
new (__ptr) __obj; \
AddPointer(__ptr, __FILE__, __LINE__, 2, sizeof(__obj)); \
}
#define MM_DELEMM_P(__var, __destructor_name) \
{ \
(__var)->__destructor_name; \
RemovePointer(__var, __FILE__, __LINE__, 2); \
}
как плюс :
1) нету проблем с сторонними либами, потому что либа может содержать в хидерах вызов new\delete и поставляться в уже собранном виде, а мы при подключении хидера переопределим new\delete и всё сломается
2) в дебаге мы следим за каждым выделением, потому если что-то потечет то сразу узнаем где
|
|
|
Сообщение было полезно следующим пользователям:
|
|
29.04.2012, 21:40
|
#7
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Управление памятью.
полезно, но это:
что за фигня, джимон?
стандартом не гарантируется sizeof(int) == sizeof(void*)
например в cl.exe на 64 битный платформах инт 32 битен.
делай уж все размеры связанные с выделением памяти size_t
|
(Offline)
|
|
29.04.2012, 21:55
|
#8
|
|
Ответ: Управление памятью.
HolyDel
помарка, виноват хотя это не так критично в данном месте, при выделении больше 4 гигов всего лишь в логе будет неверный размер
|
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:21.
|