精华内容
下载资源
问答
  • 计算结构体字节数

    2019-09-27 14:36:17
    1.计算字节数 struct xx { long long _x1; char _x2; int _x3; char _x4[2]; static int _x5; }; int xx::_x5; sizeof(xx)== 24 原因: 由于CPU一次读取若干字节的内存数据,所以,为了方便存取,编译器可以...

    错题

    1.计算字节数

    struct xx
    {
    	long long _x1;
    	char _x2;
    	int _x3;
    	char _x4[2];
    	static int _x5;
    };
    int xx::_x5;
    

    sizeof(xx)== 24

    原因:

    由于CPU一次读取若干字节的内存数据,所以,为了方便存取,编译器可以指定结构体的对齐方式。静态成员放置在静态区而不占用结构体内存,所以将其忽略。由于long long、char、int、char[2]占用的字节各为8、1、4、2。
    在这里插入图片描述在这里插入图片描述

    展开全文
  • 结构体数组字节数大小

    千次阅读 2017-03-12 15:09:43
    代码1: 1 struct BOOK 2 { 3 char name[5];... 分别计算sizeof(struce BOOK)和sizeof(book)的字节数大小,结果分别为12,和24。原因在于结构体有字节对齐规则。  其内存分配情况如下:   1b
    代码1: 
    1 struct BOOK
     2 {
     3     char name[5];
     4     float price;
     5 }book[2];  
    

            分别计算sizeof(struce BOOK)和sizeof(book)的字节数大小,结果分别为12,和24。原因在于结构体有字节对齐规则。

            其内存分配情况如下:

           

    1byte 1byte 1byte 1byte
    name  [0]    name  [1]    name [2]    name [3]        
    name[4]
       
    float float float float

            第一步:先找结构体成员中占字节数最大的元素,求出其占的字节数(注意,若成员中也有结构体,把结构体按照一个成员来看),例如,例子中最大元素的字节数为4,则以4来分配其它成员。
            第二步:按照成员的先后顺序排列,如表格所示,数组超过了4个字节,换行继续排列。剩下3个字节不够float型数据使用,则换行,空出3个字节空间。依此类推。

    代码2:

     struct BOOK
     {
        char name[NAME];
        float price;
        char tmp;
     }book[2];  
    

            若此时多出来一个char成员,那么,字节数变为16,其内存分配方式如下所示,假若改变char到第二排,那么总字节数就变为12,所以要合理安排顺序。

    1byte 1byte 1byte 1byte
    name [0] name [1] name [2] name [3]
    name [4]      
    float float float float
    char    


    最后注意:
            一般设置的对齐方式为1,2,4字节对齐方式,VC一般默认为4字节(最大为8字节)。结构的首地址必须是结构内最宽类型的整数倍地址;另外,结构体的每一个成员起始地址必须是自身类型大小的整数倍(需要特别注意的是windows下是这样的,但在linux的gcc编译器下最高为4字节对齐),否则在前一类型后补0;这里特别提到的是数组一定要注意,而且在一些编程的技巧中,我们可以使用数组强制字节达到对齐的目的。这在网络编程中是很常见的。
            故struct sockaddr_in6结构体的大小为28个字节
    展开全文
  • 计算结构体大小时需要考虑其内存布局,结构体在内存中存放是按单元存放的,每个单元多大取决于结构体中最大基本类型的大小,下面我们看几个例子:1.struct A {  char a;  int b;  short c; }str1; 这里...

    我们都知道在数据类型中,char类型占1个字节,short占2个字节,int占4个字节,long占8个字节等等。

    在计算结构体大小时需要考虑其内存布局,结构体在内存中存放是按单元存放的,每个单元多大取决于结构体中最大基本类型的大小,下面我们看几个例子:

    1.

    struct A
    {
      char a;
      int b;
      short c;
    }str1;
    这里char占1个字节,int占4个字节,short占2个字节,按单元存放如下图:

    1 2 3 4
    a
    b b b b
    c c

    由于a占用了1个字节,b存不下,所以开辟新的单元存放b,然后再开辟新的单元存放c。

    从这里可以看出结构体在内存中是按单元存放的,总占用字节数就是3*4=12。

    2.

    struct B
    {
      char a;
      short c;
      int b;
    }str2;
    存放如图:

    1 2 3 4
    a c c
    b b b b

    在这里由于b占用4个字节,而a和c总共才占用3个字节,足够c存放,所以c存放在a的后面,再开辟新的单元存放b。

    此例中占用字节数为2*4=8。

    3.

    struct c
    {
      char a;
      char b[2];
      char c[4];
    }str3;
    存放如图:

    1 2 3 4 5 6 7
    a b b b b c c

    这里由于数据类型都为char类型,故不必再开辟新的单元,一行存完。

    占用字节数为1*1+2*1+4*1=7。

    综上所述,结构体在内存中存放是按单元存放的,所开辟单元的最大长度取决于占字节最大的数据类型,此外我们可以发现存储顺序对空间的使用率有一定的影响。

    从以上三例可以看出,第一种最浪费空间;第三种最节省空间,但全使用相同类型,丢失了字段本生的数据类型,不方便使用;第二种介于第一种和第三种写法之间,其空间上比较紧凑,同时又保持了结构体中字段的数据类型。大家可以尝试用sizeof()去深入了解结构体中的按单元存放。

    展开全文
  • 计算结构体大小时需要考虑其内存布局,结构体在内存中存放是按单元存放的,每个单元多大取决于结构体中最大基本类型的大小,下面我们看几个例子: 1. struct A{ char a; int b; short c;}str1; 这里char占...

    我们都知道在数据类型中,char类型占1个字节,short占2个字节,int占4个字节,long占8个字节等等。

    在计算结构体大小时需要考虑其内存布局,结构体在内存中存放是按单元存放的,每个单元多大取决于结构体中最大基本类型的大小,下面我们看几个例子:

     

    1.

    struct A
    {
      char a;
      int b;
      short c;
    }str1;

    这里char占1个字节,int占4个字节,short占2个字节,按单元存放如下图:

      1  2  3  4

    a      
    b b b b
    c c    

     

     

     

    由于a占用了1个字节,b存不下,所以开辟新的单元存放b,然后再开辟新的单元存放c。

    从这里可以看出结构体在内存中是按单元存放的,总占用字节数就是3*4=12

     

    2.

    struct B
    {
      char a;
      short c;
      int b;
    }str2;

    存放如图:

      1  2  3  4

    a  
    b b b b

     

     

     

    在这里由于b占用4个字节,而a和c总共才占用3个字节,足够c存放,所以c存放在a的后面,再开辟新的单元存放b。

    此例中占用字节数为2*4=8

     

    3.

    struct c
    {
      char a;
      char b[2];
      char c[4];
    }str3;

    存放如图:

      1  2  3  4  5  6  7

    a b b c c c c

     

     

    这里由于数据类型都为char类型,故不必再开辟新的单元,一行存完。

    占用字节数为1*1+2*1+4*1=7

     

    综上所述,结构体在内存中存放是按单元存放的,所开辟单元的最大长度取决于占字节最大的数据类型,此外我们可以发现存储顺序对空间的使用率有一定的影响。

    从以上三例可以看出,第一种最浪费空间;第三种最节省空间,但全使用相同类型,丢失了字段本生的数据类型,不方便使用;第二种介于第一种和第三种写法之间,其空间上比较紧凑,同时又保持了结构体中字段的数据类型。大家可以尝试用sizeof()去深入了解结构体中的按单元存放。

     

    转载于:https://www.cnblogs.com/adamjwh/p/5828059.html

    展开全文
  • 在学习C语言的时候很多人可能遇到了和我同样的问题,就是无法正确计算出C语言结构体所占字节的总的大小。首先,在开始计算结构体占用字节大小之前,我们要先搞懂什么是结构体的对齐和补齐。为什么会有结构体的对齐与...
  • sizeof的详尽计算结构体字节数方法

    千次阅读 2014-09-16 15:25:53
    sizeof的详尽计算结构体字节数方法  本文主要包括二个部分,第一部分重点介绍在VC中,怎么样采用sizeof来求结构的大小,以及容易出现的问题,并给出解决问题的方法,第二部分总结出VC中sizeof的主要用法。...
  • 结构体类型的字节数

    2021-01-06 19:25:20
    sizeof()运算符用于计算基本类型、结构体类型的所占字节数; #include <iostream> using namespace std; struct student{ int id; char ch; }; int main() { printf("%d\n",sizeof(int)); printf("%d\n...
  • 结构体所占字节数计算

    千次阅读 2015-05-28 17:11:12
    结构体所占字节数遵循以下原则: 1、 结构体的大小等于结构体内最大成员大小的整数倍 2、 结构体内的成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍,比如说double型成员相对于结构体的首地址...
  • 如果不考虑或者不存在内存对齐问题,这个结构体应该占1+4+1 = 6个字节,然而事实上它占了12个字节,???,这就涉及到内存对齐问题了。 结构体中的成员可以是不同的数据类型,成员按照定义时的顺序依次存储在连续...
  • 关于计算结构体数组中字节数

    千次阅读 2016-07-24 20:37:48
    2.结构体计算长度,如下:  #include #include struct student {  int num;  char name[20];  char sex;  float score;    };   main() { struct student stu_1, *p;  printf("steudent len is %d\
  • struct 结构体 所占字节数计算

    千次阅读 2019-10-10 19:29:39
    定义结构体类型,只能说明该类型的组成情况,并没有分配内存空间。只有当定义属于结构体类型的变量时,系统才会分配空间给该变量。
  • (2)结构体的总的大小必须是结构体内部最大的基本数据类型所占字节数的倍数。 栗子: 表格 第1列是各个元素首地址; 第2列是结构体总的字节数; 第3列是结构体对齐字节数。 针对P5的字节大小,最重要的原则是...
  • 结构体与共用体字节数计算

    千次阅读 2018-12-09 23:24:22
    直到今天遇到了这一类问题才好好研究了一下,发现这里面竟有很多我不曾掌握的知识点,那么现在就来学习一下如何计算结构体与共用体、两者相互嵌套的字节数计算 内存对齐 首先在计算这两者的字节数之前,需要了解...
  • 这是因为结构体内存对齐的原因, 两个int 是8个字节, 一个char是 1 个字节, 这个结构体按道理说是 9 个字节, 但实际上是 12 , 这就涉及到了内存对齐的原因, 我的编译器是 MinGw-64 , 默认对齐是4个字节, 也就是说不到...
  • 结构体计算要遵循字节对齐原则 结构体默认的字节对齐一般满足三个准则: 1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除; 2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的...
  • 结构体成员字节对齐

    2012-03-15 12:16:27
    为什么需要字节对齐?计算机组成原理教导我们这样有助于加快计算机的取速度,否则就得多花指令周期了。...这样,两个中间就可能需要加入填充字节,所以整个结构体的sizeof值就增长了。 字节

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 523
精华内容 209
关键字:

结构体计算字节数