Lion007
>с третьим параметром - беда, однако
потому что в рамках calling convention нельзя организовать padding между параметрами
Конишуа
дык я и не спорю... но хоть бы предупредили!
а вообще - мура все это... после первого же падения в этом месте стало бы ясно где чего поправить. это я все к тому, что можно же выровненые параметры передавать! но МС как всегда поленился...
Lion007
> про 2003 ничего не скажу - под руками нет
> gcc сожрал. и, насколько я могу судить по ассемблерному коду - таки выровнял на стеке...
Я сейчас вспомнил, я не пробовал передавать выровненную структуру как параметр функции, так что возможно это и в VS2003 никогда не работало.
А что, gcc прожевывает __declspec(align(...))???.... я радуюсь, что именно его использую 8)
> с третьим параметром - беда, однако
Хоть так... я всёравно радуюсь :) .... хотя и незнаю, нужно-ли мне это...
Lion007
> с третьим параметром - беда, однако
Хотя, выравнивание с помощью пустоты всегда не есть гуд, я всегда пытаюсь (там где нужно) расставить элементы в оптимальном порядке, чтобы выравнивание получалось с минимумом пустого пространства. А здесь спасибо за инфу, буду знать как выравнивать параметры функции.
progmachine
именно __declspec(align(N)) гцц не очень любит, но он прожевавает __attribute__((aligned(N))) - это его родное...
так что дефайн типа ALIGNED(N) тебя спасет.
кстати, во время похода за пивом пришла вголову мысль - откуда может взяться требование на непрерывность параметров ф-ии в стеке...
например - из-за ... (всмысле три точки - переменный список параметров). va_arg достает их подряд...
хотя по-прежнему остаюсь при мнении, что компилятор мог бы и предупредить о том, что "вот это я выровнять не смог, хоть и пытался".
О великие гуру СыПыПы! Объясните ламеру простыми словами, зачем нужна __declspec(align(N)). Укажите ПРАКТИЧЕСКОЕ применение.
SlavaGorbacheff
>О великие гуру СыПыПы! Объясните ламеру простыми словами, зачем нужна
>__declspec(align(N)). Укажите ПРАКТИЧЕСКОЕ применение.
Выравнивание объектов на правильные адреса. На PC встречается редко. В основном, если вручную работать с DMA, что уже большая редкость :) или с переменными типа __m128.
На консолях встречается сплошь и рядом, с выравниванием от 4 байт до 64 кб.
dDIMA
Спасибо.
скажиет а Visual Studio 2008 от 2005 сильно отличается?? и Visual basic?
Тема в архиве.