데이터 정렬 데이터 alignment에 대한 좋은 설명은 밑바닥 개발, 예를 들어 구동 개발을 하는 것이 중요하다. 이런 개념은 매우 중요하다.
3008 단어 Data
정렬
정렬성은 메모리 주소의 특성으로 메모리 주소 모드의 2의 멱으로 나타난다.예를 들어, 메모리 주소 0x0001103F 모드 4의 결과는 3입니다.이 주소는 4n+3과 정렬된다고 하는데 4는 선택한 2의 멱의 값을 가리킨다.메모리 주소의 정렬은 2에 대한 멱값에 따라 결정됩니다.같은 주소 모드 8의 결과는 7이다.
하나의 메모리 주소가 표현식 Xn+0에 부합되면, 이 주소는 X에 맞다고 합니다.
CPU 실행 명령은 메모리에 저장된 데이터를 조작하는 것으로 메모리에 주소를 표시한다.주소에 대해 말하자면, 단독 데이터는 메모리를 차지하는 바이트 수를 가지고 있다.만약 그것의 주소가 그것의 바이트 수에 맞다면, 이 데이터를 자연 정렬이라고 하고, 그렇지 않으면 정렬하지 않았다고 한다.예를 들어 8바이트를 표시하는 부동 데이터의 주소가 8에 맞으면 이 데이터는 자연히 맞춰진다.
데이터 정렬성 컴파일 처리
장치 컴파일러는 데이터가 정렬되지 않는 것을 방지하는 방식으로 데이터를 주소 분배한다.
하나의 데이터 형식에 대해 컴파일러가 분배하는 주소는 데이터 형식 바이트의 배수이다.따라서 컴파일러가 롱형 변수에 분배한 주소는 4의 배수이다. 즉, 2진법으로 주소를 표시하면 마지막 두 자리는 0이다.
또한 컴파일러는 각 구조 멤버를 자연스럽게 정렬하는 방식으로 구조체를 채운다.아래 코드 안의 구조체 struct x 를 보십시오.
Code:
Select all
struct x_
{
char a; // 1 byte
int b; // 4 bytes
short c; // 2 bytes
char d; // 1 byte
} MyStruct;
컴파일러는 이 구조를 자연스럽게 맞추기 위해 채웠다.
예컨대
다음 코드는 컴파일러가 메모리에 어떻게 채워졌는지 설명한다.
Code:
Select all
// Shows the actual memory layout
struct x_
{
char a; // 1 byte
char _pad0[3]; // padding to put 'b' on 4-byte boundary
int b; // 4 bytes
short c; // 2 bytes
char d; // 1 byte
char _pad1[1]; // padding to make sizeof(x_) multiple of 4
}
두 가지 정의는sizeof(struct x)로 되어 있다연산은 12바이트로 되돌아옵니다.
두 번째 정의에는 다음과 같은 두 가지 채우기 요소가 있습니다.
*char _pad0[3] int b를 4바이트 경계에 맞추기
*char _pad1[1]구조수 그룹structx bar[3] 정렬.
충전은bar[3]의 각 변수를 자연스럽게 맞출 수 있게 한다.
다음 코드는 bar[3]의 메모리 구조를 보여 줍니다.
Code:
Select all
adr
offset element
------ -------
0x0000 char a; // bar[0]
0x0001 char pad0[3];
0x0004 int b;
0x0008 short c;
0x000a char d;
0x000b char _pad1[1];
0x000c char a; // bar[1]
0x000d char _pad0[3];
0x0010 int b;
0x0014 short c;
0x0016 char d;
0x0017 char _pad1[1];
0x0018 char a; // bar[2]
0x0019 char _pad0[3];
0x001c int b;
0x0020 short c;
0x0022 char d;
0x0023 char _pad1[1];
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
pandas 읽기 및 쓰기 Excelpandas 읽기와 쓰기 Excel은 중복된 데이터 가공 작업을 pandas에 맡기고 수동 노동을 절약하며 사용하기도 편리하지만 출력의 형식은 그다지 아름답지 않다.본고는 read_excel()과to_excel()의...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.