• sizeof


    sizeof
     1 #include <iostream>
     2 #include<stdio.h>
     3 #include<string.h>
     4 using namespace std;
     5 struct
     6 {
     7     short a1;
     8     short a2;
     9     short a3;
    10 }A;
    11 struct
    12 {
    13     long a1;
    14     short a2;
    15     
    16 }B;
    17 main()
    18 {
    19     char *ss1="0123456789";
    20     char ss2[]="0123456789";
    21     char ss3[100]="0123456789";
    22     int ss4[100];
    23     char q1[]="abc";
    24     char q2[]="a\n";
    25     char *q3="a\n";
    26     char *str1=(char *)malloc(100);
    27     void *str2=(void *)malloc(100);
    28     cout<<sizeof(ss1)<<endl;
    29     cout<<sizeof(ss2)<<endl;
    30     cout<<sizeof(ss3)<<endl;
    31     cout<<sizeof(ss4)<<endl;
    32     cout<<sizeof(q1)<<endl;
    33     cout<<sizeof(q2)<<endl;
    34     cout<<sizeof(q3)<<endl;
    35     cout<<sizeof(A)<<endl;
    36     cout<<sizeof(B)<<endl;
    37     cout<<sizeof(str1)<<endl;
    38     cout<<sizeof(str2)<<endl;
    39 }

    1、ss1是一个字符指针,指针的大小是一个定值,就是4,所以sizeof(ss1)是4

    2、ss2是一个字符数组,这个数组最初未定大小,由具体填充值来定。1个字符所占空间是1位,10个就是10位,再加上隐含的"\0",所以一共是11位。

    3、ss3也是一个字符数组,这个数组开始预分配100,所以一共是100位。

    4、ss4是一个整形数组,每个整形变量所占空间是4,所以一共400位。

    5、同2

    6、q2里面有一个"\n","\n"算做一位,所以它的空间大小是3。

    7、q3是一个字符指针,指针的大小是一个定值,就是4。

    8、在默认情况下,为了方便对结构体内元素的访问和管理,当结构体内的元素的长度都小于处理器的位数的时候,便以结构体里面最长的数据元素为对齐单位,也就是说,结构体的长度一定是最长的数据元素的整数倍。如果结构体内存在长度大于处理器位数的元素,那么就以处理器的位数为对齐单位。

    A中3个short类型变量都是以2字节对齐,结构体参数按默认的8字节对齐,则a1,a2,a3都取2字节对齐,sizeof(A)为6,其也是2的整数倍。

    B中a1为4字节对齐,a2取2字节对齐,结构体大小6字节,6不为4的整数倍,补空字节,增到8时,符合所有条件,则sizeof(B)为8.

  • 相关阅读:
    Swift学习一
    Swift开发学习(一):初始篇
    objc_msgSend arm64 崩溃问题
    更改navigationController push和pop界面切换动画
    iOS 改变UITextField中光标颜色
    IOS Core Animation Advanced Techniques的学习笔记(五)
    使用CAShapeLayer与UIBezierPath画出想要的图形
    亮相SIGGRAPH 太极拳三维教学App制作揭秘
    MySQL优化——索引
    求职前一个月复习知识
  • 原文地址:https://www.cnblogs.com/anderson0/p/1849223.html
Copyright © 2020-2023  润新知