나는 다음과 같은 코드가 있습니다스택 변수는 GCC __attribute __ ((aligned (x)))에 의해 정렬됩니까?
#include <stdio.h>
int
main(void)
{
float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0};
printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]);
}
을 그리고 난 다음과 같은 출력이 있습니다
a[0]
의 주소가
0x1000
의 배수가 아닌 이유
0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac
?
정확히 __attribute__((aligned(x)))
은 무엇을합니까? 내가 오해 한 것 this 설명?
저는 gcc 4.1.2를 사용하고 있습니다.
+1 정답. 또 다른 해결책은 로컬 어레이를 정적으로 만드는 것입니다. 스택의 정렬은 항상 문제이며이를 피하는 습관을 갖는 것이 가장 좋습니다. –
오 예, 정적으로 생각하지 않았습니다. 이것은 이름 충돌을 방지하기 때문에 좋은 생각입니다. 나는 내 대답을 편집 할 것이다. – Zifre
정적으로 만들면 재 호출이 불가능하고 스레드로부터 안전하지 않게됩니다. – ArchaeaSoftware