나는이 C 코드할당 순서가
#define STACKSIZE 65536
char d[STACKSIZE];
if (((int) &d[STACKSIZE-1]) - ((int) &d[0]) + 1 != STACKSIZE) {
Printf ("Stack space reservation failed\n");
Exit();
}
printf("Allocated from %d to %d so for %d bytes\n", &d, d+sizeof(d), sizeof(d));
auto int a = 3;
printf("Now the stack pointer is on %d\n",&a);
을 실행하는거야 그리고 내가 65536 바이트 위해 이렇게 -4197296하는 -4262832에서 할당 된 출력 로 얻을 것은 이제 스택 포인터는 -4262836
에이것은 "a"변수가 배열 후에 스택에 놓이게됨을 의미합니다. 그러나 가변 길이 배열 (런타임에 길이가 설정된 배열)을 사용하면 반대의 동작이 발생합니다. 배열 앞에 배열을 넣습니다.
이
는 코드 (이 같지만 배열의 크기는 런타임에 걸렸고된다)#define STACKSIZE 65536
int i = 1;
char d[i*STACKSIZE];
if (((int) &d[STACKSIZE-1]) - ((int) &d[0]) + 1 != STACKSIZE) {
Printf ("Stack space reservation failed\n");
Exit();
}
printf("Allocated from %d to %d so for %d bytes\n", &d, d+sizeof(d), sizeof(d));
auto int a = 3;
printf("Now the stack pointer is on %d\n",&a);
이 65536 바이트 정도로 -4197320하는 -4262856에서 할당 출력
인 이제 스택 포인터가 켜짐 -4197312
그래서 문제가 무엇입니까? 어떻게 해결할 수 있습니까 (가변 길이 배열을 사용하고 그 뒤에 스택에 변수 넣기).
감사합니다.
코드를 포맷하고 적절한 태그를 넣어 언어를 나타낼 수 있습니까? 그것이 C 인 경우 대문자 P가있는 Printf는 없습니다. 그런 다음 다른 사람들이 읽을 수 있도록 코드를 수정하십시오. – t0mm13b