함수에 파라메터로 넘어오는 변수의 address 앞 2바이트가 다를 수 있나요?
글쓴이: litnsio2 / 작성시간: 월, 2011/08/22 - 4:15오후
문득 궁금한 것이 생겼는데..
(32비트 머신이라는 가정하에) 동일한 블럭 안에서 선언된 변수의 앞 2바이트의 주소가 다를 수 있을까요?
예를 들어,
void somefunc(int i, short s, void* vp)
{
}
위와 같은 함수에서 전달인자 i, s, vp 주소의 prefix 2 바이트 값이 다른 경우가 있을수도 있는지 궁금합니다.
위의 코드에서 s 와 vp 를 4바이트 변수에 넣어야 하는 상황이 발생했는데,,
s 값과 &vp 의 (vp가 아님) 하위 2바이트를 masking 해서 4바이트 변수로 넣고, 이를 newVal 이라고 했을 때
호출된 함수 내부에서 &i 를 통해, &vp 의 상위 2바이트 값을 복원하려고 합니다.
이 가정은 하나의 함수에 parameter 로 넘어가는 변수들의 주소 상위 2바이트가 항상 같다면 써먹을 수 있는 방법인 것 같은데요.~
이런 방법이 실제로 사용되고 있는 방법인지, 아니면 엉뚱한 생각인지 모르겠네요.
플랫폼은 x86과 arm 입니다.
Forums:
somefunc의 스택 크기에 따라
somefunc의 스택 크기에 따라 다르겠지요.
하지만 보통 그런 설계가 안전하다고들 생각하겠습니까?
그냥 4byte를 구조체의 포인터로 활용하시는게
그냥 4byte를 구조체의 포인터로 활용하시는게 어떨까요.
댓글 달기