64 비트 우분투 리눅스에서 메모리 할당에 대해 질문하고 싶습니다.64 비트 시스템에서 메모리 할당
다음 코드를
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
char buffer_one[8], buffer_two[8];
printf("Size of char: %u\n", sizeof(char));
printf("Buffer_two is at %p\n", buffer_two);
printf("Buffer_one is at %p\n", buffer_one);
}
을 가지고이 실행될 때, 다음과 같은 결과가 문자 유형의 크기가 1 바이트, 심지어으로 나는 내 질문은
$ ./sizeofchar
Size of char: 1
Buffer_two is at 0x7fff98069910
Buffer_one is at 0x7fff98069900
을 가정 것으로 나타 (제발 내가 틀렸을 경우 여기에 맞습니다.) Buffer_two
과 Buffer_one
이 서로 옆에 할당되어 있는데, 왜 Buffer_two
과 Buffer_one
메모리 주소는 16 바이트 떨어져 할당됩니까?
이것은 엄격하게 구현 된 세부 사항입니다. 컴파일러는 임의의 주소에서 로컬 변수를 할당 할 수 있습니다. 프로그램은이 주소가 무엇인가에 의존하지 않아야합니다. –
이드는 16 바이트 정렬을위한 최적화라고 생각합니다. –
@Als 감사합니다.이 주소를 사용하려고하지 않습니다. 특별한 이유가 있다면 나는 궁금 할뿐입니다. – Wins