C 언어 구조 체 계산 메모리 점용 문제 분석

c 언어 에서 구조 체 의 사용 은 매우 광범 위 하지만 구조 체 에 문제 가 있다.만약 에 시작 하 는 필드 속성 이 문자 유형(char)이 고 다른 유형,예 를 들 어 정형,장정 형,쌍 정밀도,부동 소수점 형 이 뒤 따 르 면 구조 체 의 크기 가 달라 질 수 있다.다음 에 예 를 들 어 다음 과 같은 예 를 들 어 다음 과 같다.

#include <stdio.h>
struct person{
  char sex;
  int age;
  char name[8];
};
int main()
{
  printf("sizeof(person) = %d
",sizeof(struct person)); return 0; }
    이 예 는 매우 간단 합 니 다.바로 하나의 구조 체 를 정의 하 는 것 입 니 다.세 가지 속성:각각 char 유형의 sex,int 유형의 age,char[]유형의 name 입 니 다.직관 적 으로 볼 때 크기 는 1+4+8=13 이 어야 합 니 다.그러나 우 리 는 컴 파일 하고 실행 합 니 다.결 과 는 다음 과 같 습 니 다.

# clang hello.c -o hello
# ./hello
sizeof(person) = 16
    시 작 된 char 는 1byte 가 아 닌 4byte 로 분 배 됩 니 다.비슷 한 int 와 정렬 하기 위해 서 입 니 다.이것 이 바로 c 언어 구조 체 의 메모리 정렬 의 구체 적 인 표현 입 니 다.Liux 에서 증가attribute__((__packed__))구조 체 가 설명 한 곳 에서 상기 코드 를 수정 하면 다음 과 같다.

    프로그램 이 실 행 됩 니 다.최종 인쇄 결 과 는 13 입 니 다.우리 가 원래 예 상 했 던 것 에 부합 합 니 다. 
    필드 정렬 크기 를 1 로 지정 하 는 수정 방법 도 있 습 니 다.다음 과 같 습 니 다.

    이 두 가지 방법 은 Liux 에서 만 효력 이 발생 하 는 것 같 습 니 다.windows 에서 이런 방법 은 문법 오 류 를 보고 할 수 있 습 니 다.
C 언어 구조 체 컴 퓨 팅 메모리 점용 문제 분석 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 C 언어 구조 체 메모리 점용 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 바 랍 니 다!

좋은 웹페이지 즐겨찾기