c编译器字节对齐指令】的更多相关文章

#pragma pack (n)             作用:C编译器将按照n个字节对齐.#pragma pack ()               作用:取消自定义字节对齐方式. #pragma  pack (push,1)     作用:是指把原来对齐方式设置压栈,并设新的对齐方式设置为1个字节对齐 #pragma pack(pop)            作用:恢复对齐状态…
注意: 出于效率的考虑,C语言引入了字节对齐机制,一般来说,不同的编译器字节对齐机制有所不同,但还是有以下3条通用准则: (1)结构体变量的大小能够被其最宽基本类型成员的大小所整除: (2)结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding): (3)结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding). 字节对齐第3…
第一种 #pragma pack(push, 1) // 先把当前对齐设置压栈,再设置为1字节对齐 struct S { char a; ]; }; #pragma pack(pop) // 恢复先前压栈的设置 #pragma pack(push, 1)相当于 #pragma pack(push)#pragma pack(1) 第二种 #pragma pack (n) //作用:C编译器将按照n个字节对齐. struct S { char a; ]; } #pragma pack () // 作…
  前言简介   前文已经对虚拟机进行过了简单的介绍,并且也对class文件结构,以及字节码指令进行了详尽的说明 想要了解JVM的运行机制,以及如何优化你的代码,你还需要了解一下,java编译器到底是如何编译你的代码的 本文不是从最底层的编译原理讲解 本文是针对java代码,去查看归纳总结编译器的结果行为,从而直观的感受到字节码指令集 也就是说本文的内容,主要针对的是使用javap 查看字节码文件中方法的code属性中的字节码内容 让你从java代码  class文件格式,以及字节码指令集 进行…
以前一直用MDK,用__align(4)就可以定义一个首地址被4整除.地址按4字节对齐的数组,但今天用IAR发现这么写编译报错. 搜了一下才发现,原来不同的编译器,需要用不同的表达方式: #if defined (__CC_ARM) /*!< ARM Compiler */ //MDK __align() uint16_t data[]; #elif defined ( __ICCARM__ ) /*!< IAR Compiler */ #pragma data_alignment=4 uin…
最近在使用ac6.9的编译器,编译速度是真的很快,使用stm32的hal库编译速度也比ac5的编译器快很多.本文试验stm32中字节对齐的代码测试,主要是结构体,因为结构体中实际项目中用到最多,同时在仿真环境中打印出来. ac5的测试结果: #ifdef CC_ARM_AC5 //该方式只是使用ac5编译器,结构体不对齐的方式1,结构体的长度,就是各个变量长度的和 __packed typedef struct _li_st { uint8_t a; //1个 uint16_t b; //2个…
(1)我们假设只有一个赋初值的char型全局变量,那么系统会在data区分配一个4字节的存储空间来存储它.实际上,只用了1个字节,但是为了4字节对齐,只好分配4个字节,所以就会有3个字节浪费. (2)我们假设在原来基础上增加一个赋初值的char型全局变量,那么系统会在data区原来的4字节中取出一个字节来保存这个新的变量.实际上,这时只用了2个字节,但是为了4字节对齐,只好分配4个字节,所以就会有2个字节浪费. (3)我们假设再在原来基础上增加一个赋初值的short型全局变量,那么系统会在dat…
一.什么是对齐,以及为什么要对齐: 1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐. 2. 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同.一些平台对某些特定类型的数据只能从某些特定地址开始存取.其他平台可能没有这种情况, 但是最常见的是如果不按照适合其平台的要求对数据存放进行对齐…
本文原链接: http://www.cnblogs.com/zouzf/p/4455167.html 先看一下这个链接:http://www.cnblogs.com/ren54/archive/2013/01/11/2856207.html 我遇到情况和这位朋友很类似:用二进制方式从文件读取内容到内存,假设内容只有7个字节,前面三个字节是三个字符,后四个字节的内容是一个int数据,在把后四个字节转成int数据时如(pFileContent是char*指针,已指向第四个字节):int intVal…
一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐.      对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同.一些平台对某些特定类型的数据只能从某些特定地址开始存取.比如有些架构的CPU在访问一个没有进行对齐的变量的时候会发生错误,那么在这种架构下…