您的位置:主页 > 合作方式 >

合作方式 sizeof()的简单介绍_C 语言

2017-10-15作者:织梦猫来源:admin次阅读

(1)基本概念

    sizeof巧妙地控制符以八位字节外形做准备了其巧妙地控制数的往事大小人。巧妙地控制数可以是括在插入语切中要害表达或典型确定。。巧妙地控制数往事大小人由巧妙地控制数典型确定。。

(二)运用方法

1、数据典型

    sizeof运用外形:sizeof(type) ,如sizeof(int)

2、变量

    sizeof运用外形:sizeof(var_name)或sizeof var_name

    变量名可以用插入语括起来。。如sizeof (var_name),sizeof var_name等一下都是正式的的外形。插入语更经用。,集中程序员运用这种外形。。

    注意到:sizeof巧妙地控制符不克不及用于应变量典型,未完成的典型或位田。不完成的典型是指具有未知往事大小人的数据典型。,部署兵力典型,如未知的往事大小人、未知质地的排列或统一典型、空典型等。。

    如sizeof(max)若此刻变量max明确为int max(),sizeof(char_v) 即使char_v明确为在这点上炭 char_v [ max ]和max未知,sizeof(void)都过失正式的外形。

(三)sizeof器械在排列上的养护

    看一眼下面的排列:


struct MyStruct
{   
double doub;
char ch;  
int i;
};

   对排列MyStruct采取sizeof会呈现什么成果呢?sizeof(MyStruct)为很呢?或许你会这么大的求:

   sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13

下面是上胶料行为准则:

#include

using namespace std;

struct MyStruct

{

    double doub;

    char ch;

    int i;

};

int main()
{
MyStruct ms;
cout << sizeof(ms) << endl;
return 0;
}

上胶料成果:

   只是当你在VC中上胶料下面所说的事排列时,它很大。,你会发展sizeof(ms)为16。说起来,这是vc对变量往事的特别处置。。为了增殖cpu的往事响声,VC将相当多的变量的萌芽地址健康制约。。在默许养护下,VC规则各会员变量存款的萌芽地址相对于排列的萌芽地址的偏移量一定为该变量的典型所职业的八位字节数的乘。

共有权的健康制约方法

典型健康制约(相对于i的变量的初始地址的偏移量)
char偏移量一定为sizeof(char)即1的乘
int偏移量一定为sizeof(int)即4的乘
double偏移量一定为sizeof(double)即8的乘
short偏移量一定为sizeof(short)即2的乘
float偏移量一定为sizeof(float)即4的乘

每个会员变量,在往事中,如i按次器械住宿。,如前述的健康制约方法健康制约驻扎军队。,空八位字节VC将自发地衬料。。同时VC为了确保排列的大小人为排列的八位字节限制数(即该排列中职业最大住宿的典型所职业的八位字节数)的乘,因而,在为最后的每一会员变量器械住宿晚年的,空八位字节是如需求自发地衬料的。。

struct MyStruct

{

    double doub;

    char ch;

    int i;

};

   当住宿分懂道理的人前述的排列时,鉴于会员变量按次和健康制约的vc,先分派住宿的高音部件双,其萌芽地址跟排列的萌芽地址比得上(合法的偏移量0合法的为sizeof(double)的乘),该会员变量职业sizeof(double)=8个八位字节;接下来,为其次个会员分派住宿。,此刻,下每一分派的地址偏移了,是sizeof(char)的乘,因而拿CH偏移8健康制约。,该会员变量职业sizeof(char)=1个八位字节;接下来,为第三个会员分派住宿,此刻,下每一分派的地址偏移了,过失sizeof(int)=4的乘,为了确信的偏移对健康制约的约束,VC自发地衬料3八位字节(这三个八位字节不放普通的东西),此刻,下每一分派的地址偏移了,合法的是sizeof(int)=4的乘,因而拿i在12偏移量。,该会员变量职业sizeof(int)=4个八位字节;这时总数排列的会员变量曾经都分派了住宿,职业住宿的总大小人是:8+1+3+4=16,合法的为排列的八位字节限制数(即排列中职业最大住宿的典型所职业的八位字节数sizeof(double)=8)的乘,到这地步不需求衬料空八位字节。。因而总数排列的上胶料是:sizeof(MyStruct)=8+1+3+4=16,这些八位字节中有3个是由VC自发地衬料的。,心不在焉放普通的重量为的东西。

    这是另每一情况。,运转乾坤的会员变量在下面的驻扎军队里,将其替换为以下质地:


struct MyStruct
{
char ch;
double doub;
int i;
};

    In VC environment,可以来sizeof(MyStruct)为24。合并下面提到的分派住宿的大约基本的,剖析以内,VC若何为上? Structure distribution space

struct MyStruct

{

    char ch;        // 偏移量为0。,确信的健康制约,Ch职业1八位字节。;

    double doub;    下每一使得地址的偏移量是1。,过失sizeof(double)=8

                    //的乘,您需求做出成绩7个八位字节,使偏移量更顶替8。

                    Way),因而VC自发地衬料7八位字节。,双往事在偏移8

                    On the address,它至多需求8八位字节。。

    int i;            下每一使得地址的偏移量是1。6,是sizeof(int)=4的倍

                    //数,适合int的健康制约方法,因而VC不需求自发地衬料。,i存

                    用偏移量16写上地址,它至多需求4八位字节。。

};                    占有会员变量都是分派的住宿。,住宿的总大小人是1 7 8 4 = 20。,心不在焉排列

                    //的节限制数(即排列中职业最大住宿的典型所职业的八位字节数sizeof

                    乘(双)=8,到这地步需求衬料4八位字节。,为了确信的排列的上胶料

                    //sizeof(double)=8的乘。

    因而排列的总上胶料是:sizeof(MyStruct)为1+7+8+4+4=24。总共,7 4 = 11八位字节由VC自发地衬料。,心不在焉放普通的重量为的东西。

    vc对往事排列的特别处置确凿增殖了CPU的响声。,但时而也会到达短距离不方便的。,人们还筛了变量的默许健康制约方法。,可以设置变量的健康制约方法。。

    pragma is provided in VC 在n八位字节健康制约中设置变量(n)。n八位字节健康制约平均数对i的偏移有两个学期:高音部,即使n是大于或胜任该变量职业的八位字节数,偏移量一定确信的默许健康制约方法。,其次,即使N以内变量的典型,八位字节数的考察,因此偏移量是n的乘。,不适合默许健康制约方法。排列的总大小人也有约束。,隔离物以下两种养护:即使n大于占有会员变量典型O的八位字节数,排列的总大小人一定是所职业的住宿的接近。;用以表示威胁,它一定是n的乘。。

下面的情况说明了它的用法:


#pragma 打包(推) //生计健康制约制约
#pragma 包(4) 设置为4八位字节健康制约
struct MyStruct
{
char ch;
double doub;
int i;
};
#pragma 包装(POP) Restore alignment

上胶料成果:

(四)sizeof用法总结

1. 决定因素是数据典型或普通变量。。

    譬如sizeof(int),sizeof(long)等一下。需求注意到的是有区别的零碎或DI所来的成果。。譬如,int典型职业16位零碎切中要害2八位字节。,32位零碎切中要害4八位字节。

2. 决定因素是部署兵力或指示剂。。

    下面举例说明.

int [ 50 ] //sizeof(a)=4*50=200; 计算部署兵力的住宿大小人。

int *a = new int [ 50 ] // sizeof(a)=4; a是指示剂,sizeof(a)是求指示剂的大小人,在32位零碎中,自然是4八位字节。。

3.  及其他决定因素。


int func(char s[5])
{
return 1;              应变量的决定因素在传输时作为指示剂处置。,因而sizeof(s)性质上为求指示剂的大小人。
}
sizeof(func("1234")); 因应变量的又来典型是int。,因而相当于求sizeof(int),它的值是4。

凡本站注明“本站”或“投稿”的所有文章,版权均属于本站或投稿人,未经本站授权不得转载、摘编或利用其它方式使用上述作品。本站已授权使用的作品,应在授权范围内使用,并注明“来源:某某站”并附上链接。违反上述声明者,本站将追究其相关法律责任。

编辑: 关键词:

网友评论

随机推荐

图文聚集

热门排行

最新文章

新浪微博 腾讯微博 RSS订阅