-
- на практике ALIGN(8) встречается для работы с .data .bss, если проц умеет long long-ами (64 бит) работать, то процедуры инициализации (crt0 и т.п., что работает до вызова main()) обычно делают через ldd/std, соответственно нужно выравнивание на 8, ыыыы(268 знак., 15.08.2011 15:20, )
- Хотя, про "целиком на теории" это я слегка приврал. Проверено: данные размером в двойное слово считаются выровненными, если они выровнены по слову. По дальнейшему размышлению это кажется логичным (регистры у Cortex-M3 размером в слово, т.ч. мохоноги(180 знак., 15.08.2011 14:39)
- У меня было последствие: ф-ция printf() неправильно выводила float, когда указатель стека при её вызове не был кратен 8. Но это было на ARM7TDMI. - SciFi(15.08.2011 14:33)
- Нашёл тред в почтовой рассылке CodeSourcery о сходной проблеме (sprintf, float, указатель стека не кратен 8) с Cortex-M3. Запомню. мохоноги(1155 знак., 16.08.2011 20:20 - 21.08.2011 00:43, ссылка)
- printf("", (int)1, (float)2) и printf("", (float)1, ...) дадут положение аргумента типа float на стеке как раз на 4 байта выше-ниже. Т.е. если сбой возникает когда "не кратен 8" -- он будет возникать всегда и это никак не исправить пока fk0(289 знак., 15.08.2011 15:01)
- Да уже никто ту память не считает, а компилятор подавно - Vladimir Ljaschko(15.08.2011 23:05)