⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 数据对齐.txt

📁 講述ARM下的字符數據對齊方式的內容
💻 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 + -