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+구조 체 메모리 정렬 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
HDU 원활 공사 & & 원활 공사 (차 트 법)모 성 은 도시 의 교통 상황 을 조사 하여 기 존의 도시 도로 통계 표를 얻 었 고 표 에는 모든 도로 가 직접 연 결 된 도시 가 열거 되 어 있다.성 정부의 '원활 한 공사' 목 표 는 성 전체의 어느 두 도시...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.