2013-05-18 2 views
1

동적 메모리 할당에 문제가 있습니다. 어쨌든 내 구조체의 실제 크기 (모든 부분의 합계)는 유형 자체의 크기보다 작습니다. 여기서 코드 :유형 및 메모리 할당 크기

#include <stdio.h> 
#include <malloc.h> 

struct Lol { 
    int a; 
    char b; 

    char s[20]; 
}; 

void main() { 

    Lol* lol = (Lol*)malloc(sizeof(Lol)); 

    printf("Type size: %d bytes\n", sizeof(Lol)); 
    printf("Actual struct size: %d bytes\n", sizeof(lol -> a) + sizeof(lol -> b) + sizeof(lol -> s)); 

} 

이 경우, 구조체의 크기가 25 바이트 (INT 4 바이트 문자가 1 바이트 문자 배열은 20 바이트)되어야한다, 그러나를 sizeof는 (롤) 어떤 이유로 날 (28)을 도시 as char 형은 int 형으로 취급됩니다. 이게 다 뭐니? 이것은 내가 3 바이트를 잃지 않는다는 것을 의미합니까?

답변

1
(모든 부분의 합) 내 구조체의

실제 크기는 종류 자체 "의 크기보다 작

값들이 특정 메모리에서 정렬 작업을 할 때 많은 컴퓨터 작업이 빨리되기 때문에 C 언어 표준은 구현이 그러한 정렬을 수행하도록 허용합니다. 대부분의 시스템에서 int는 int의 크기에 따라 4 바이트 또는 8 바이트 경계에 정렬됩니다. 구조체의 크기는 주소 배열의 다음 struct 구조체가 제대로 정렬되므로 4 바이트 경계에 정렬 된 int로 시작하는 구조체의 크기는 4의 배수 여야합니다.

아무 의미없이 3 바이트가 손실됩니까?

예. (글쎄요, 정확히 아무것도 아닙니다 ... 당신의 프로그램은 일반적으로 더 빠를 것입니다.) 최대 2 테라 바이트의 RAM을 지원하는 최신 기계의 경우, 이것은 이전보다 한 번 우려 할 사항이 아닙니다.