my_function_call이 호출되면 test 사본이 전달됩니다. 그것은 테스트 자체를 통과하지 않기 때문에 테스트의 정렬은 부적합합니다. 정렬 속성은 값이 아닌 테스트 객체의 속성입니다.
인수는 플랫폼 지정 방식으로 전달됩니다. 보통 작은 인수가 레지스터에 전달됩니다. 대부분의 시스템에서 레지스터는 메모리의 일부가 아닌 특수 하드웨어이므로 주소가 없으므로 정렬이되지 않습니다.
인수가 큰 경우 플랫폼 사양에서 인수가 메모리로 전달되도록 지정할 수 있습니다. 그런 다음 호출 함수의 역할은 테스트 복사본을 메모리에 저장하고 해당 주소를 호출 된 함수에 전달하고 호출 된 함수는 해당 주소를 사용하여 복사본을 검색하는 것입니다. 컴파일러가 임시 복사본의 정렬에 약간의 영향을 줄 수는 있지만 가능하지는 않습니다.
어떤 이유로 든 호출 된 함수가 정렬 된 주소로 전달되도록하려는 경우 test 값을 전달하는 대신 해당 주소 또는 사본 주소 (정렬 속성으로도 사용됨)를 전달하십시오. 또한 정렬 된 주소를 전달하고 호출 된 함수가 정렬 된 것을 알기를 원하면 함수의 매개 변수를 정렬 속성이있는 유형의 포인터로 선언하십시오. (이 작업을 수행하는 구문은 표준 C의 일부가 아니기 때문에 컴파일러에 따라 다릅니다. 그렇게하는 방법은 typedef를 사용하여 유형을 정의하고 typedef에 정렬 속성을 포함시킨 다음 함수 매개 변수를 선언하는 것입니다. 해당 유형에 대한 포인터가되어야합니다.)
정당한 이유없이 개체 정렬에 대해 자신을 염려하지 않아야합니다.
난 당신이 이전 질문에 관심이 생각하는 (!) : http://stackoverflow.com/questions/841433/gcc-attribute-alignedx-explanation – ziu
네 감사합니다. 나는 게시하기 전에 검색했지만 그 기사는 나를 도망 갔다. –