내 컴퓨터 (Linux를 실행하는 64 비트 Intel)에서 다음 프로그램을 실행했습니다.
#include <stdio.h>
void test(int argc, char **argv) {
printf("[test] Argc Pointer: %p\n", &argc);
printf("[test] Argv Pointer: %p\n", &argv);
}
int main(int argc, char **argv) {
printf("Argc Pointer: %p\n", &argc);
printf("Argv Pointer: %p\n", &argv);
printf("Size of &argc: %lu\n", sizeof (&argc));
printf("Size of &argv: %lu\n", sizeof (&argv));
test(argc, argv);
return 0;
}
프로그램의 출력은
$ gcc size.c -o size
$ ./size
Argc Pointer: 0x7fffd7000e4c
Argv Pointer: 0x7fffd7000e40
Size of &argc: 8
Size of &argv: 8
[test] Argc Pointer: 0x7fffd7000e2c
[test] Argv Pointer: 0x7fffd7000e20
포인터의 크기 &argv
는 8 바이트입니다. 나는의 주소를 예상 argc
할 수를 address of (argv) + sizeof (argv) = 0x7ffed1a4c9f0 + 0x8 = 0x7ffed1a4c9f8
하지만, 4 바이트 패딩 그들 사이에 존재한다. 왜 이런 경우입니까?
내 생각 엔 메모리 정렬 때문일 수 있지만 확실하지 않습니다.
내가 호출하는 함수와 동일한 동작을 발견했습니다.
main
. C에서는 main
일반 함수로 호출 될 수 있으므로 일반 함수와 같은 인수를 받아야하며 ABI를 준수해야합니다.
main
.