beldmit: (Default)
[personal profile] beldmit
Сегодня пронаблюдал любопытный глюк оптимизации.

Код, по смыслу эквивалентный


Object* Func(OtherObject* param) {
Obj2 * param1 = (Obj2*) param;
return param1->Pointer
}


при передаче туда NULL не выдал ошибку. А вернул какой-то ненулевой указатель.
Механизм более-менее понятен, но факт нетривиален...

Date: 2004-03-03 04:25 pm (UTC)
From: [identity profile] alexkuklin.livejournal.com
них... себе.
за такое отрывать руки разработчикам компилятора.

Date: 2004-03-03 11:38 pm (UTC)
From: [identity profile] beldmit.livejournal.com
Да в общем штатная оптимизация - вернуть адрес + смещение.
Но результат неожиданный.

Date: 2004-03-04 12:20 am (UTC)
From: [identity profile] degor.livejournal.com
А за такой код кому руки отрывать? :)
Пользуйте виртуальные функции и будет вам щастье.

Сорри, проходил мимо и не смог удержаться.

Date: 2004-03-04 02:20 am (UTC)
From: [identity profile] alexkuklin.livejournal.com
В целом, нафиг отрывать и выкидывать язык, в котором такое возможно в принципе.

Date: 2004-03-04 03:31 am (UTC)
From: [identity profile] degor.livejournal.com
Трудно не согласиться. Но заменить-то порой нечем.

Date: 2004-03-04 03:25 am (UTC)
From: [identity profile] beldmit.livejournal.com
За такой код их как раз уже оторвали. Но результат хорош.

Profile

beldmit: (Default)
Dmitry Belyavskiy

December 2025

S M T W T F S
 123456
78910111213
14151617181920
2122 2324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 28th, 2025 08:38 pm
Powered by Dreamwidth Studios