?? 數據對齊.txt
字號:
1、ARM是RISC處理器,ARM系列處理器的內存訪問,要求數據對齊,即存取“字(word)”數據時要求四字節對齊,地址的bit[1:0]==0b00;存取“半字(half words)”時要求兩字節對齊,地址的bit[0]==0b0;存取“字(byte)”數據時要求該數據按其自然尺寸邊界(Nature Size Boundary)定位。ARM編譯程序通常將全局變量對齊到自然尺寸邊界上,以便通過使用LDR和STR指令有效地存取這些變量。
2、
// 例子1
void test(void)
{
char a[] = {1,2,3,4,5};
int *pi, i;
printf("&a[1]=%p\n", &a[1]);
pi = (int *)&a[1];
i = *pi;
printf("%08X\n", i);
}
關鍵是這句:
i = *pi;
可以觀察該段代碼在不同平臺上的運行結果:
// 例子2
void test(void)
{
int a[] = {0x04030201, 0x08070605};
int *pi, i;
pi = (int *)&((char *)&a)[1];
printf("pi=%p\n", pi);
i = *pi;
printf("%08X\n", i);
}
//由于下面p a c k參數大小的不同,結構S i z e的大小不同
#pragma pack(1) / / s i z e o f ( S i z e ) = 1 7
//#pragma pack(2) / / s i z e o f ( S i z e ) = 1 8
//#pragma pack(4) / / s i z e o f ( S i z e ) = 2 0
//#pragma pack(8) / / s i z e o f ( S i z e ) = 2 4
//#pragma pack(16) / / s i z e o f ( S i z e ) = 2 4
struct Size
{
char c1;
int i1;
float f1;
double d1;
} ;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -