+58
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
void Model::setPosition(GLfloat x, GLfloat y, GLfloat z) {
if (m_position == NULL) {
m_position = (float *) malloc(3 * sizeof(float));
}
if (m_position != NULL) {
m_position[0] = x;
m_position[1] = y;
m_position[2] = z;
}
}
void Model::setRotate(GLfloat x, GLfloat y, GLfloat z) {
if (m_rotate == NULL) {
m_rotate = (float *) malloc(3 * sizeof(float));
}
if (m_rotate != NULL) {
m_rotate[0] = x;
m_rotate[1] = y;
m_rotate[2] = z;
}
}
http://code.google.com/p/forget3d/
Во первых, умиляет умение людей взяв современный супернавороченый удобный автомат, вместо того чтоб нажать на курок и выстрелить в противника, взять этот автомат наперевес как дубинку, и идти им пиздить противника по голове. Я о сишке, слегка прикрытой крестами.
И во вторых, этот код при недостатке памяти просто нифига не делает, что чревато непонятками - вроде и повертел модель, вроде и подвинул, а оно никак не вертится и не двигается.
Запостил: Pythoner,
27 Августа 2014
kipar 27.08.2014 13:01 # +3
WGH 27.08.2014 13:38 # +5
absolut 29.08.2014 20:11 # +1
kegdan 29.08.2014 20:40 # +1
absolut 29.08.2014 21:40 # 0
3.14159265 27.08.2014 13:41 # 0
Недостаток памяти всегда чем-то чреват. И неважно где это на стеке или в куче.
Edit: впрочем kipar выше об этом уже написал.
Pythoner 27.08.2014 14:07 # 0
3.14159265 27.08.2014 15:48 # +1
И если не хватает чистить все booststd::weak_ptr и кеши?
roman-kashitsyn 27.08.2014 16:00 # 0
> чистить все std::weak_ptr
А чего их чистить? Они вроде сами очищаются при уничтожении последнего shared_ptr, GC ждать не надо.
3.14159265 27.08.2014 18:22 # 0
Так нам надо их почистить не на последней ссылке, а по нехватке памяти.
bormand 27.08.2014 18:14 # +1
Юзать new, оно кидает исключение.
Ваш кэп.
3.14159265 27.08.2014 18:21 # 0
Xom94ok 27.08.2014 20:33 # 0
Psionic 27.08.2014 18:46 # 0
bormand 27.08.2014 18:55 # +1
Можно линк?
Psionic 28.08.2014 08:47 # 0
bormand 28.08.2014 09:05 # +2
Они так говорят, как-будто new для примитивов что-то инициализирует.
Psionic 28.08.2014 11:12 # 0
bormand 28.08.2014 11:24 # 0
А если ты напишешь pod без дефолтного конструктора - там что new, что malloc нихера не будут инициализировать:
defecate-plusplus 28.08.2014 11:44 # +2
std::auto_ptr + malloc - не надо так
всё выделенное malloc-ом должно быть освобождено как free, а не delete
bormand 28.08.2014 12:04 # +1
bormand 28.08.2014 12:07 # 0
javahutt 29.08.2014 03:24 # 0
bormand 29.08.2014 07:39 # 0
Я знаю, что его нельзя юзать для массивов.
Abbath 29.08.2014 14:56 # 0
bormand 29.08.2014 15:34 # +1
В шестом говнобилдере он не deprecated.
Abbath 29.08.2014 22:34 # 0
Но зачем?
guest 29.08.2014 22:40 # −1
bormand 29.08.2014 22:54 # 0
Есть такое слово - legacy.
javahutt 29.08.2014 03:41 # 0
operator new(size_t), не?
Soul_re@ver 27.08.2014 19:02 # 0
Или что-нибудь вроде Поскольку с исключениями работать не умеют
javahutt 29.08.2014 03:20 # 0
bormand 29.08.2014 07:48 # 0
В gcc - только когда бросаются. В остальное время они вообще никак не влияют, помимо раздувания бинарника
Там код с try/catch даже может работать быстрее кода с ифами, если исключение не бросается - на успешном пути не будет лишних проверок и переходов.
kegdan 29.08.2014 08:57 # 0
А так - да, Мне кажется так в любом языке - если исключения не выпадают то возвратов тупо нет.
bormand 29.08.2014 09:06 # +1
Ну вот не читается у меня файл, оборвался сокет, не спарсился XML - это всё ненормальные ветки, они не исполняются когда всё ок. Вот для них такие исключения идеальны, и код будет работать чуть быстрее, чем с if'ами.
А всё подряд на исключениях делать глупо, я не спорю. Если ветки равновероятны - какая ж это исключительная ситуация?
kegdan 29.08.2014 09:16 # 0
guest 29.08.2014 10:17 # +4
roman-kashitsyn 29.08.2014 10:19 # 0
bormand 29.08.2014 11:51 # 0
roman-kashitsyn 29.08.2014 11:52 # 0
bormand 29.08.2014 13:47 # +4
roman-kashitsyn 29.08.2014 14:05 # 0
3.14159265 29.08.2014 14:10 # 0
while (!solution_found())
bormand 29.08.2014 14:37 # 0
С ними работать удобней - не надо базис индукции писать.
Не помню, выкладывал ли я МНК, в котором строится бесконечная система уравнений с бесконечным числом переменных, а потом прямо так и приводится к треугольному виду. К сожалению последний шаг в бесконечности не получился ;(
roman-kashitsyn 29.08.2014 14:46 # 0
Впрочем, я понял тебя - ты имеешь в виду функции, которые принципиально должны работать лишь с бесконечными списками (вроде преобразований эйлера для бесконечных рядов). Там исключение будет где-нибудь в head пустого списка :)
kegdan 29.08.2014 14:51 # 0
bormand 29.08.2014 15:36 # 0
kegdan 29.08.2014 15:42 # 0
bormand 29.08.2014 15:47 # 0
ХБЗ.
kegdan 29.08.2014 15:49 # 0
inkanus-gray 30.08.2014 13:30 # 0
Химическо-биологическая защита?
Хлопчатобумажный зипун?
Hemoglobin subunit zeta?
Handwerksbildungszentrum?
Hemorrhagic Bowel Syndrom?
bormand 30.08.2014 13:42 # 0
kegdan 30.08.2014 14:53 # 0
kegdan 29.08.2014 14:50 # 0
3.14159265 29.08.2014 13:03 # 0
Эээ. Ну вообще-то всё зависит от выбранной схемы EH.
dwarf - без переголовы.
sjlj немного-таки просаживает пирфоманс, даже если исключение не бросается!
javahutt 29.08.2014 21:07 # 0
3.14159265 29.08.2014 21:14 # 0
Дадад. Когда будешь линковать с кодом скомпиленным с другим EH или вообще без инфы о unwinding (сишка) тогда поймешь ценность sjlj.
Кстати как там у dwarfa c 64-битными платформами?
guest 29.08.2014 21:19 # −4
bormand 29.08.2014 22:19 # +1
fxd
unwind через область с чужеродным EH - в любом случае игра на грани фола.
guest 29.08.2014 22:20 # −4
javahutt 29.08.2014 23:38 # 0
Эээ, а как sjlj тут поможет?
>Кстати как там у dwarfa c 64-битными платформами?
Под юниксами есть, про венду не знаю. На IA64, кстати, dwarf -- стандартный способ делать EH.
3.14159265 01.09.2014 12:45 # 0
Через калбеки winApi dw2-исключение не пройдёт, sjlj - со свистом.
Борманд выше правильно поправляет: под виндой sjlj неизбежен. sjlj - совместимость, dw2 - производительность. Трейдофф.
bormand 01.09.2014 15:15 # 0
Qwertiy 27.08.2014 19:48 # 0
eth0 27.08.2014 17:13 # +5
Soul_re@ver 27.08.2014 18:01 # 0
kegdan 27.08.2014 19:42 # 0
Pythoner 27.08.2014 20:29 # 0
Здесь принимается что sizeof(GLfloat) == sizeof(float), что логически вроде и обосновано, хотя стандарт этого не обещает. Интересно, есть ли системы где это не так?
bormand 27.08.2014 21:50 # 0
Нет. Мы ведь не видим определений m_position и m_rotate. Если там просто float - то всё норм...