c - 학생을 - 구조체 멤버는 메모리에 어떻게 할당됩니까?




학생을 나타내는 구조체 student는 주민등록번호 (2)

  1. 회원은 하나씩 있습니다.
  2. 모든 멤버의 시작 위치 셰플러는 길이에 따라 정확하게 나뉩니다.

예 :

typedef struct {
char field1;
int field2;
double field3;
} SomeType;

구조체의 첫 번째 위치는 x :

field1의 길이는 1 (바이트)이고 filed2는 4, field3은 8

field1은 x + 0에 있고, field2는 x + 4 ~ x + 7에 있고, field3은 x + 8 ~ x + 15에 있고, x + 1 ~ x + 3은 오른쪽에 field2를 만들기 위해 패딩되어 있습니다.

그리고 전체 struct의 길이는 가장 큰 멤버로 정확히 나눠 져야합니다. 그렇지 않은 경우 끝에 바이트를 채 웁니다.

미래의 C 프로그램을위한 메모리 관리자를 만들려고 시도하면서, 나는이 질문을 건너왔다.

"구조체가 할당되면 멤버 필드가 지정된 순서대로 저장됩니까?"

예를 들어, 다음 구조체를 고려하십시오.

typedef struct {
    int field1;
    int field2;
    char field3;
} SomeType;

할당되면 필드의 메모리 주소가 field1, field2, field3 순서로 유지됩니까? 아니면 보장되지 않습니까?


field3field1 다음에 오는 field2 다음에오고 그 field1 은 메모리의 시작에 있습니다 (즉, field1 앞에 패딩이 없음). 그러나 다른 멤버간에 field3 수 있습니다 (필드 3 이후에도 있음). 간단히 말해서, 선언 된 순서는 메모리에서 배열되는 순서이지만 정확한 정렬과 패딩은 구현 정의되어 있지만 (첫 번째 멤버 앞에 패딩이 없을 것입니다).







struct