zoukankan      html  css  js  c++  java
  • 内存对齐

    #include <iostream>
    using namespace std;
    
    #pragma pack(2)
    class A
    {
    	int i;
    	union U
    	{
    		char buff[13];
    		int i;
    	}u;
    	void foo() {    }
    	typedef char* (*f)(void*);
    	enum{red, green, blue} color;
    
    }a;
    int main(void)
    {
    	cout << sizeof(a)<< endl;
    	return 0;
    }

    运行结果:



        看到这个结果是22,不是24是不是感觉很惊讶。我们除了共用体U外全部屏蔽,再次执行看看执行结果是多少?

    #include <iostream>
    using namespace std;
    
    #pragma pack(2)
    class A
    {
    //	int i;
    	union U
    	{
    		char buff[13];
    		int i;
    	}u;
    	void foo() {    }
    	typedef char* (*f)(void*);
    //	enum{red, green, blue} color;
    
    }a;
    int main(void)
    {
    	cout << sizeof(a)<< endl;
    	return 0;
    }


    执行结果:


        看到这里,你也许就知道了第一次执行的结果为什么不是24,而是22,因为这里有句#pragma pack(2)   就是这句,使得内存是按照2字节对齐的关系,而不是默认的4字节对齐。如果把这句#pragma pack(2)去掉,再次执行,结果为16,这里就不贴图片了。

        那么空类,或者没有变量的对象的大小为多少呢?

    #include <iostream>
    using namespace std;
    
    #pragma pack(2)
    class A
    {
    //	int i;
    //	union U
    //	{
    //		char buff[13];
    //		int i;
    //	}u;
    	void foo() {    }
    	typedef char* (*f)(void*);
    //	enum{red, green, blue} color;
    
    }a;
    int main(void)
    {
    	cout << sizeof(a)<< endl;
    	return 0;
    }


    执行结果:


         对,没错,空类,或者没有变量只有函数声明的类对象所占的大小为1.


    如果去掉#pragma pack(2),执行结果是多少呢?

    #include <iostream>
    using namespace std;
    
    
    class A
    {
    	int i;
    	union U
    	{
    		char buff[13];
    		int i;
    	}u;
    	void foo() {    }
    	typedef char* (*f)(void*);
    	enum{red, green, blue} color;
    }a;
    int main(void)
    {
    	cout << sizeof(a)<< endl;
    	return 0;
    }




  • 相关阅读:
    使用公钥登录SSL
    javascript看你能够做对几题
    windows 与fedora时间差
    Linux 启动直接进入 console,
    fedora -- java多版本切换
    fedora 解决yumBackend.py进程CPU占用过高
    fedora 禁止nouveau加载
    联邦学习中的隐私研究
    优秀博客链接
    【论文学习11】GIANT: Globally Improved Approximate Newton Method for Distributed Optimization
  • 原文地址:https://www.cnblogs.com/james1207/p/3358137.html
Copyright © 2011-2022 走看看