c+구조 체 메모리 정렬 기본 개념 및 예시

기본 개념:
각 구성원 변수 가 저장 하 는 시작 주 소 는 구조의 시작 주소 에 비해 이 변수의 유형 이 차지 하 는 바이트 수의 배수 가 되 어야 합 니 다.각 구성원 변 수 는 저장 할 때 구조 에 나타 난 순서에 따라 순서대로 공간 을 신청 하고 위의 정렬 방식 에 따라 위 치 를 조정 해 야 합 니 다.빈 바이트 가 자동 으로 채 워 지 는 동시에 구조의 크기 가 구조의 바이트 경계 수(즉,이 구조 에서 가장 큰 공간 을 차지 하 는 유형의 바이트 수)의 배 수 를 확보 하기 위해 마지막 구성원 변 수 를 위해 공간 을 신청 한 후에 필요 에 따라 빈 바이트 를 자동 으로 채 웁 니 다.
예 를 들 어 설명:

#include <iostream>

using namespace std;

#pragma pack(8)
struct Test1
{
 char a; //0 - 1
 short b;//2 - 3
 int c;// 4 - 7
 float d;//8 - 11
 double e;//12 - 23
};

#pragma pack(4)
struct Test2
{
 char a; //0 - 1
 short b;//2 - 3
 int c;// 4 - 7
 float d;//8 - 11
 double e;//12 - 19
};

#pragma pack(8)
struct Test3
{
 double e;//0-7
 float d;//8-13
 short b;//14-15
 int c;// 16-19
 char a; //20-23
};

int main()
{
 std::cout << "size test1= " << sizeof(Test1) << std::endl;
 std::cout << "size test2= " << sizeof(Test2) << std::endl;
 std::cout << "size test3= " << sizeof(Test3) << std::endl;
 return 0;
}
구조 체 메모리 정렬 규칙
1)첫 번 째 멤버 는 구조 체 와 의 오프셋 이 0 인 주소 에 있다.
2)다른 구성원 변 수 는 특정한 숫자(정렬 수)의 정수 배의 주소 로 정렬 해 야 한다.
      메모:정렬 수=컴 파 일 러 의 기본 정렬 수 와 구성원 크기 의 작은 값 입 니 다.
      VS 의 기본 정렬 수 는 8 이 고 gcc 의 정렬 수 는 4 입 니 다.
3)구조 체 의 총 크기 는 최대 정렬 수(모든 변수 유형 최대 자 와 기본 정렬 매개 변수 최소)의 정수 배 이다.
4)구조 체 가 포 함 된 경우 포 함 된 구조 체 는 자신의 최대 정렬 수의 정수 배 에 맞 춰 구조 체 의 전체 크기 는 모든 최대 정렬 수(포 함 된 구조 체 의 정렬 수 포함)의 정수 배 이다.
이상 은 c++구조 체 메모리 정렬 기본 개념 및 예제 에 대한 상세 한 내용 입 니 다.c+구조 체 메모리 정렬 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기