C++의 메모리 정렬 실례 상세 설명

3663 단어 C++메모리 정렬
C++의 메모리 정렬 실례 상세 설명
메모리 정렬
         우리 프로그램 에 서 는 데이터 구조 와 변수 등 이 메모 리 를 차지 해 야 합 니 다.많은 시스템 에서 메모리 분 배 를 요구 할 때 정렬 해 야 합 니 다.이렇게 하면 메모리 에 접근 하 는 속 도 를 높 일 수 있 습 니 다.
우 리 는 먼저 간단 한 프로그램 을 보 는 것 이 좋 겠 다.
           프로그램 1

 #include <iostream>
 using namespace std;
 
 struct X1
 {
  int i;//4   
  char c1;//1   
  char c2;//1   
 };
 
 struct X2
 {
  char c1;//1   
  int i;//4   
  char c2;//1   
 };
 
 struct X3
 {
  char c1;//1   
  char c2;//1   
  int i;//4   
 };
 int main()
 {  
   cout<<"long "<<sizeof(long)<<"
"; cout<<"float "<<sizeof(float)<<"
"; cout<<"int "<<sizeof(int)<<"
"; cout<<"char "<<sizeof(char)<<"
"; X1 x1; X2 x2; X3 x3; cout<<"x1 "<<sizeof(x1)<<"
"; cout<<"x2 "<<sizeof(x2)<<"
"; cout<<"x3 "<<sizeof(x3)<<"
"; return 0; }
      이 프로그램의 기능 은 매우 간단 하 다.바로 세 개의 구조 X1,X2,X3 를 정의 한 것 이다.이 세 가지 구조의 주요 차이 점 은 메모리 데이터 배치 순서 이 고 다른 것 은 모두 같다.또한 프로그램 은 몇 가지 기본 유형 이 차지 하 는 바이트 수 와 우리 가 있 는 세 개의 구조 가 차지 하 는 바이트 수 를 입력 했다.
이 프로그램의 실행 결 과 는 다음 과 같 습 니 다.

 long 4
 float 4
 int 4
char 1
x1     8
x2     12
x3     8
     결과 의 앞의 네 줄 은 아무런 문제 가 없 지만 우 리 는 마지막 세 줄 에서 세 개의 구조 가 차지 하 는 공간 크기 가 다 르 기 때문에 이 원인 이 바로 내부 데이터 의 배치 순서 이다.어떻게 이 럴 수 있 지?
    다음은 우리 가 말 해 야 할 메모리 정렬 입 니 다.
    메모 리 는 연속 적 인 블록 입 니 다.아래 그림 으로 표시 할 수 있 습 니 다.  이것 은 4 개의 바이트 로 단 위 를 정렬 합 니 다.
     그림 1
mem1.jpg
   메모리 에 있 는 세 개의 구 조 를 보 여 줍 니 다.
   먼저 X1 입 니 다.다음 그림 과 같 습 니 다.
mem2.jpg
    X1 에서 첫 번 째 는 Int 형식 으로 4 바이트 를 차지 하기 때문에 앞의 4 칸 이 꽉 찼 습 니 다.그 다음 에 두 번 째 는 char 유형 입 니 다.이 유형 은 한 바이트 만 차지 하기 때문에 두 번 째 4 바이트 블록 중의 첫 번 째 칸 을 차 지 했 습 니 다.세 번 째 도 char 유형 이기 때문에 한 바이트 도 차지 하고 두 번 째 블록 의 두 번 째 칸 에 있 습 니 다.그것들 을 합 쳐 도 크기 가 한 블록 을 넘 지 않 기 때문에 그들 세 변 수 는 메모리 에 있 는 구조 가 바로 이렇다.메모리 블록 이 정렬 되 어 있 기 때문에 마지막 에 나 온 결 과 는 6 이 아니 라 8 이다.왜냐하면 뒤의 두 칸 도 사실은 사 용 된 셈 이기 때문이다.
    다시 보기 X2,그림 참조
mem4.jpg
    X2 에서 첫 번 째 유형 은 Char 유형 으로 하나의 바이트 를 차지 하기 때문에 첫 번 째 블록 의 첫 번 째 칸 에 있 습 니 다.두 번 째 는 Int 유형 입 니 다.4 개의 바이트 를 차지 합 니 다.첫 번 째 블록 은 한 칸 을 사 용 했 고 3 칸 이 남 았 습 니 다.두 번 째 Int 유형 을 내 려 놓 을 수 없 을 것 입 니 다.정렬 을 고려 해 야 하기 때문에 두 번 째 블록 에 넣 어야 합 니 다.세 번 째 유형 은 Char 유형 으로 첫 번 째 와 유사 하 다.메모리 블록 이 정렬 되 어 있 기 때문에 우리 의 메모 리 는 8 개의 격자 가 아니 라 12 개의 격자 입 니 다.
다음 그림 과 같이 X3 를 보십시오.
mem3.jpg
   X3 에 대한 설명 은 사실 X1 과 유사 하 다.단지 두 개의 1 바이트 의 것 을 앞 에 놓 았 을 뿐이다.앞의 두 가지 상황 의 설명 을 보면 여기 서도 쉽게 이해 할 수 있다 고 믿는다.
   아,이 손 까지 쓰 느 라 피곤 해 요.관건 은 그림 을 그 리 는 거 예요.이 글 을 통 해 메모리 정렬 의 기본 개념 을 이해 할 수 있 기 를 바 랍 니 다.문제 가 있 으 면 메 시 지 를 남 겨 주세요.
 읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.함께 발전 하 세 요!

좋은 웹페이지 즐겨찾기