스택 기반 구조가 ARM 어셈블리의 서브 루틴으로 전달되는 방식은 무엇입니까? 예를 들어ARM에서 스택 기반 구조에 대한 호출 규칙?
는 :
이 경우typedef struct SomeStruct {
uint32_t one;
uint32_t two;
uint32_t three;
uint32_t four;
} SomeStruct;
void SomeFunction(uint32_t someValue, SomeStruct someStruct, uint32_t otherValue);
, 어떻게 구조가 전달 될 것인가? 내 생각은 다음과 같습니다
r0
-someValue
r1
-someStruct.one
r2
-someStruct.two
r3
-someStruct.three
*sp
-someStruct.four
*sp,#4
-otherValue
맞습니까? 아니면 다른 것이 있습니까?아니면 그냥 구조체의sp
을 전달하면됩니까?
이제 생각해 보면, 내 추측은 정말 어리 석다. –
구조체가 실제로 작지 않다면 구조체를 직접 전달하는 것이 일반적이지 않습니다. 구조체에 포인터를 전달하면 funciton을 호출하는 오버 헤드가 줄어 듭니다. – TJD
@ TJD : 논리적으로 복사본이기 때문에 문제가 있습니다. 따라서 호출자가 SomeFunction (1, my_global_struct, 1);을 수행하고 호출 수신자가 if (& someStruct == & my_global_struct)를 수행하면 물론 false 여야합니다. 따라서 호출 규칙은 포인터를 전달할 수 있으며 도움이 될 수 있지만 호출 수신자가 여전히 복사본을 가져야하는 경우가 있습니다.이 경우 오버 헤드가 적습니다. –