字节对齐 pragma

 1 #include <iostream>
21 #define KKK
22 #define TT
23
24 #pragma pack(2)  //define to 2
25 struct test_t
26 {
27        int a;
28        char b;
29        short c;
30        char d;
31 };
32 #pragma pack()    //cancle define by user
33
34
35 using namespace std;
36
37 int main()
38 {
39
40 #if defined( KKK ) && defined (TT)
41     cout << "dslfjsdlfjdslfdjs" << endl;
42 #endif
43
44      // that will be 10
45     cout << "sizeof(test_t): " << sizeof(test_t) << endl;
46
47     string d;
48     cin >> d;
49     return 0;
50 }
时间: 2024-10-12 19:49:23

字节对齐 pragma的相关文章

字节对齐#pragma pack

这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式. #pragma pack (n)             作用:C编译器将按照n个字节对齐.#pragma pack ()               作用:取消自定义字节对齐方式. #pragma  pack (push,1)     作用:是指把原来对齐方式设置压栈,并设新的对齐方式设置为一个字节对齐 #pragma pack(pop)            作用:恢复对齐状态 因

结构体字节对齐

结构体字节对齐 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题.从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列, 而不是简单地顺序排列,这就是内存对齐. 内存对齐的原因: 1)某些平台只能在特定的地址处访问特定类型的数据: 2)提高存取数据的速度.比如有的平台每次都是从偶地址处读取数据,对于一个int型的

C++中的字节对齐

本博客(http://blog.csdn.net/livelylittlefish)贴出作者(三二一.小鱼)相关研究.学习内容所做的笔记,欢迎广大朋友指正! 字节对齐 1. 基本概念字节对齐:计算机存储系统中以Byte为单位存储数据,不同数据类型所占的空间不同,如:整型(int)数据占4个字节,字符型(char)数据占一个字节,短整型(short)数据占两个字节,等等.计算机为了高速的读写数据,默认情况下将数据存放在某个地址的起始位置,如:整型数据(int)默认存储在地址能被4整除的起始位置,字

C++中的字节对齐分析

struct A { int a; char b; short c; }; struct B { char a; int b; short c; }; #pragma pack(2) struct C { char a; int b; short c; }; #pragma pack(1) struct D { int a; char b; short c; }; int _tmain(int argc, _TCHAR* argv[]) { cout << sizeof(A) <<

指定字节对齐方式

今天看到内存字节对齐的东西,就认真的看了起来,一点睡意都没有了. 对于内存字节对齐 #pragma pack(push,n) 表示一下结构或类成员以n字节方式对齐,注意并不是每个成员都是占用n个字节,而是取min(成员类型,n).记住这一点就不怕再算错了. #pragma pack() 表示内存字节对齐方式到此结束. 下面写写几个例子: struct A{ int a; char b; short c; } 结构体A占用的字节数计算方法如下:int =4,存放在[0]~[3] char 存放在[

嵌入式Linux C语言(六)——内存字节对齐

嵌入式Linux C语言(六)--内存字节对齐 一.内存字节对齐简介 1.内存字节对齐 计算机中内存空间都是按照字节划分的,从理论上讲对任何类型的变量的访问可以从任何地址开始,但是在程序实际编译过程中,编译器会对数据类型在编译过程中进行优化对齐,编译器会将各种类型数据按照一定的规则在空间上排列,而不是顺序的排放,这就是内存字节对齐. 2.内存字节对齐原因 不同硬件平台对存储空间的处理是不同的.一些平台对某些特定类型的数据只能从某些特定地址开始存取.比如某些架构的CPU在访问一个没有进行对齐的变量

c编译器字节对齐指令

#pragma pack (n)             作用:C编译器将按照n个字节对齐.#pragma pack ()               作用:取消自定义字节对齐方式. #pragma  pack (push,1)     作用:是指把原来对齐方式设置压栈,并设新的对齐方式设置为1个字节对齐 #pragma pack(pop)            作用:恢复对齐状态 原文地址:https://www.cnblogs.com/fisherman-luo/p/10166448.htm

C语言字节对齐 __align(),__attribute((aligned (n))),#pragma pack(n)

转载地址 : http://blog.csdn.net/21aspnet/article/details/6729724 一.概念    对齐跟数据在内存中的位置有关.如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐.比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的.   二.为什么要字节对齐   需要字节对齐的根本原因在于CPU访问数据的效率问题.假设上面整型变量的地址不是自然对齐,比如为0x00000002,则CPU如果取它的值的话需要访

#pragma pack(非常有用的字节对齐用法说明)

#pragma pack(4)   //按4字节对齐,但实际上由于结构体中单个成员的最大占用字节数为2字节,因此实际还是按2字节对齐 typedef struct { char buf[3]; word a; }kk; #pragma pack()    //取消自定义字节对齐方式 对齐的原则是min(sizeof(word ),4)=2,因此是2字节对齐,而不是我们认为的4字节对齐. 这里有三点很重要:1.每个成员分别按自己的方式对齐,并能最小化长度2.复杂类型(如结构)的默认对齐方式是它最长