내 코드에 struct iof_header
이 있고, 24 바이트의 너비가 될 것이라고 판단했습니다. 나는 sizeof (iof_header)를 수행하고 32 바이트 폭을 반환합니다.구조체는 메모리에 어떻게 저장되어 있습니까?
질문 1 왜 24 바이트가 아닌 32 바이트입니까?
질문 2 구조체를 어떻게 메모리에 저장합니까?
질문 3 내가 모든 NULL입니다 바이트 내 구조체 중 하나 [4-8 & 20 ~ 24]을 만드는 모든 시간을 찾아 내 문자 배열이 분명를 참조하십시오. 배열은 다음과 같습니다. {4 bytes of BASEID_Code, 4 NULL bytes, 8 bytes of zeroed padding, 4 bytes of ASID_Code, 4 NULL bytes, 8 bytes of size}
내 unsigned __int32
회원의 끝에 NULL 바이트가 있습니다. 왜 이런 일이 발생합니까?
관련 컴파일이 가능합니까? 아마도 CPU가 이러한 데이터 유형을 더 빠르게 처리 할 수있게하는 효율성 문제일까요?
struct iof_header
{
union
{
struct
{
unsigned __int32 BASEID_Code;
unsigned __int64 padding;
union
{
char ASID_Type[4];
unsigned __int32 ASID_Code;
};
unsigned __int64 Size;
}header;
char header_c[24];
};
iof_header()
{
header.ASID_Code = 0;
header.BASEID_Code = 0;
header.Size = 0;
header.padding = 0;
}
};
어떻게'union'과'char [32]'가 32 바이트보다 작은 크기를 가질 수 있습니까? –
exlanation을 위해 이것을 읽으십시오 - http : //en.wikipedia.org/wiki/Data_structure_alignment – OldProgrammer
이것은 물어 보았고 백만 번 응답되었습니다. 세 가지 질문. 그렇다면 _separately_를 게시해야합니다. –