zoukankan      html  css  js  c++  java
  • 结构体的大小不一定是所有成员大小之和

             今天在申请内存空间的时候发现结构体的大小并不是结构体内成员大小的相加,我觉得很奇怪,就在搜了一下资料,发现原来如此:        

             结构体中的成员可以是不同的数据类型,成员按照定义时的顺序依次存储在连续的内存空间,需要注意的是结构体的大小不是所有成员大小简单的相加,需要考虑到系统在存储结构体变量时的地址对齐问题。

             这就涉及到一个定义:偏移量,偏移量指的是结构体变量中成员的地址和结构体变量地址的差。结构体大小等于最后一个成员的偏移量加上最后一个成员的大小。举个例子:

    typedef struct{
        int count;
        int  num;   
        char s; 
    }INFO;

      第一个成员的偏移量是0,第二个成员的偏移量是4,第三个成员的偏移量是8,那么结构体的大小是不是就是8+1呢,答案NO。

    因为,由于存储变量时地址对齐的要求,编译器在编译程序时会遵循两条原则:

    一、成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍);

    二、结构体大小必须是所有成员大小的整数倍。

    所以这个结构体的大小应给为12
    你可以在程序中用sizeof(类型)尝试看看!

  • 相关阅读:
    18款 非常实用 jquery幻灯片图片切换
    6款强大的 jQuery 网页布局创建及优化插件
    18 个最新实用的 jQuery 插件
    jQuery中的编程范式
    JQuery _ 定时器(jQuery Timers) 学习
    21个最佳jQuery插件推荐
    7 款基于 JavaScript/AJAX 的文件上传插件
    C#
    kernel 3.10内核源码分析--hung task机制
    进程的虚拟地址空间
  • 原文地址:https://www.cnblogs.com/candycaicai/p/1877766.html
Copyright © 2011-2022 走看看