beldmit: (Default)
Dmitry Belyavskiy ([personal profile] beldmit) wrote2004-03-03 10:02 pm

Программизм

Сегодня пронаблюдал любопытный глюк оптимизации.

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


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


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

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

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

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

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

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

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

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