Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: nginx-0.8.30
On Mon, Dec 21, 2009 at 04:58:12PM +0300, Maxim Dounin wrote:
> > > Это второй репорт который я видел про ngx_http_ephemeral(),
> > > предыдущий был тоже gcc 4.1. Если ты знаешь где ещё это вылезает
> > > - свисти, вдруг у меня завалялось. :)
> > >
> > > > Твой вариант с memcpy мне не нравится: оно не мешает при
> > > > переконфигурации,
> > > > но как общее решение не подходит - зачем копировать лишнее в run-time.
> > >
> > > Там проблема в том что объект на стеке в той же функции, и
> > > соответственно гарантированно имеет effective type.
> > > Альтернативные варианты решения:
> > >
> > > 1. Аллоцировать динамически. Что кстати приведёт к
> > > гарантированно правильному выравниванию, и сюрпризов при
> > > преобразовании в sockaddr_in на strict alignment платформах
> > > гарантировано не будет.
> >
> > Там проблема не в выравнивании, а вот в этом:
> > http://cellperformance.beyond3d.com/articles/2006/06/understanding-strict-aliasing.html
> > http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html
>
> Там проблема в том, что нарушаются strict aliasing rules
> прописанные в стандарте ISO C, и поэтому gcc ругается.
>
> В данном случае - ругается вполне правильно, ибо насколько я могу
> судить - потенциально это место чревато проблемами в случае
> архитектур со строгим выравниванием.
>
> Ибо выделяется char[] на стеке, требования к выравниванию у
> которого одни, а используется - вполне себе struct sockaddr_in,
> требования к выравниванию элементов коего совсем другие. Если
> повезёт - всё будет хорошо, но может и не повезти.
Нет, к выравниванию это не имеет никакого отношения, потому что
ругаться начинает только при -O2, -O3 и -Os. По-твоему получается,
что при -O0 и -O1 выравнивание компилятор не волнует.
Это именно проблемы оптимизации, когда два указателя указывают
на одну и ту же память.
--
Игорь Сысоев
http://sysoev.ru
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|