zoukankan      html  css  js  c++  java
  • 结构体(类)位制

    若静态变量 static int i; 是全局变量,则 sizeof(i) = 4; //存储在静态区

    若静态变量存在于结构体或类中,则sizeof(A) = 1;//静态变量也存储于静态区,结构体的大小只计算非静态变量。

           对空类或结构体,使用sizeof会返回1;//因为,如果类或结构体占用内存为0话,无法实例化并区分,故编译器为了使空类能够实例化分配了1Byte。

    struct A 
    {       
        static int i;    
    };
    
    int A::i = 1;

    如果类中存在虚函数的话,类的大小增加一个指向虚函数表的指针的大小。

    结构体位制

    当数据存储不需要占用完整的一个字节,只需要几位或者一位二进制位的时候,为了节省空间,C语言提出的一种数据结构,称“位域”或者“位段”。位域即把一个字节按位划分成区域。

    经测试,发现结构体位制以下特点:

    1. 位域的成员可以是char、short、int、unsigned类型。

    2.命名的位域位宽不能为0,长度为0的位域不能指定名字,否则编译出错。

    3.长度为0的位域的作用是使下一个成员从下一个存储单位(大小与定义位域的类型有关)开始存放;

    4.位域之外的其他内存的值并不受到改变;0位域没有使定义位域外的值赋为0。(gcc/vc6.0编译的结果)

    例如以下程序:

    image

    初始内存分布情况:从0x22ff68出开始,

    image

    内存变化情况如下:

    image

    结果为:

    image

  • 相关阅读:
    Ajax服务端框架的综合示例
    《Microsoft Sql server 2008 Internals》读书笔记目录索引
    Pro ASP.NET MVC 3 Framework
    C#客户端的异步操作
    在.net中读写config文件的各种方法
    KMP算法分析
    asp.net 4.0 + 模板引擎(NVelocity)CMS
    mvc3
    开源 Asp.net mvc 用户中心开发计划
    JqueryCMS
  • 原文地址:https://www.cnblogs.com/baiweiguo/p/3010326.html
Copyright © 2011-2022 走看看