当前位置: 首页 > news >正文

东莞微信网站企业网站建设

东莞微信网站,企业网站建设,seo排名赚app是真的吗,电子商务网站开发难点sizeof()运算符用来求对象所占内存空间的大小。 1、常见数据类型所占空间大小 下面是一些常见数据类型所占的空间大小 类型32位操作系统64位操作系统 char 14bool14short22int44long44double88float44*48 2、数组的sizeof() 一般情况下数组所占内存空…

        sizeof()运算符用来求对象所占内存空间的大小。

1、常见数据类型所占空间大小

        下面是一些常见数据类型所占的空间大小

类型32位操作系统64位操作系统

char

14
bool14
short22
int44
long44
double88
float44
*48

2、数组的sizeof()

        一般情况下数组所占内存空间的大小 = 单个类型所占空间大小 * 数组长度,不会因为你数组内是否有东西而影响,如下:

int a1[5];
int a2[] = { 1,2,3,4,5};
cout << sizeof(a1) << endl; 
cout << sizeof(a2) << endl;  

        我们知道int数据类型大小为4字节,所以上面两个数组的大小就为 4*5=20字节。

        对于字符数组有个特殊的字符‘\0’空字符。有下面几种情况

//大括号字符个数小于字符数组长度,其余空元素会自动赋值为空字符
char str1[10] = { 'a', 'b', 'c' };
cout << sizeof(str1) << endl; //输出为10//大括号字符个数等于字符数组长度,系统不会自动添加'\0',
char str2[3] = { 'a', 'b', 'c' };
cout << sizeof(str2) << endl; //输出为3//这种以字符串的形式赋值的,系统会自动在最后面添加'\0'
char str3[] = "hello world!";
cout << sizeof(str3) << endl; //输出为13,最后还有一个我们看不见的'\0'
cout << strlen(str3) << endl; //输出为12,这个函数返回字符串长度有效长度,碰到第一个‘\0’就会停止计算//下面这种情况会报错,会提示const char[13] 不能赋值给 const char[12]
//因为字符串最后都会有一个'\0',把12改成13编译才能通过
char str[12] = "hello world!";

3、结构体的sizeof()

        结构体的大小绝大部分情况下不会直接等于各个成员大小的总和,编译器为了优化对结构体成员的访问总会在结构体中插入一些空白字节。

3.1、结构体内存对齐原则

  1. 结构体的第一个数据成员存放的地址为结构体变量偏移量为0的地址,也就是首地址
  2. 结构体变量中的每个成员相对于结构体首地址的偏移量,都是该成员基本数据类型所占字节的整数倍。如char可以放在任何位置,int只可以放在结构体变量偏移量为4的倍数的位置或者结构体的首地址(为第一个数据成员时)的位置上。(内部对齐)
  3. 结构体变量的总大小,为结构体变量中“最大基本数据类型成员所占字节数”的整数倍。如果结构体只有有int、char、short三种类型,其中int所占空间最大,为4个字节,最后这个结构体所占空间就一定是4的倍数(补齐)
  4. 结构体变量的首地址,必须是结构体变量中的“最大基本数据类型成员所占字节数”的整数倍。(整体对齐)

3.2、案例

struct text1{char a;short b;int c;};
struct text2{char a;int b;short c;};
cout << sizeof(text1) << endl; //结果为8
cout << sizeof(text2) << endl; //结果为12

        对于text1,char a占1个字节,存放在偏移量为0的位置;short b占2个字节,因为要存放在2的整数倍的偏移量的位置,只能存放在偏移量为2、3两个字节位置,这样偏移量为1的地方就被空出来了;int c就可以存放在4、5、6、7;最后因为最大的数据类型是int,所以这个结构体所占空间就要为4的倍数,刚好0-7占了8个字节,只不过是空的。

text1结构体占用的内存空间
结构体变量偏移量存放的变量
0a
1
2b
3b
4c
5c
6c
7c

        同理,这里只用了10个字节,最后要补齐到12个字节,所以最后要再开辟两个字节的空间。

text2结构体占用的内存空间
结构体变量偏移量存放的变量
0a
1
2
3
4b
5b
6b
7b
8

c

9c
10
11


3.3、#pragma pack(N) 指定对齐值

        结构体的对齐规则的第二点,char可以放在任何位置是因为char的自身对齐值为1,可以被其他数整除。int的自身对齐值为4,只可以放在被4整除的地方。

        我们可以通过宏#pragma pack(N)来指定这个对齐值,这个N只能是2的幂次方(1、2、4、8......)。计算的时候会使用自身对齐值和指定对齐值的最小值来作为最终对齐值。即min{自身对齐值,指定对齐值}。这时整体对齐,字节大小是min{所有成员中自身对齐值最大的, 指定对齐值} 的整数倍

        下面代码同样的两个结果体text3、text4设置不同的对齐值最后所占内存空间大小也不同。

#pragma pack(1)typedef text3{char 	a;int		b;short   c;};#pragma pack(2)typedef text4{char 	a;int		b;short   c;};cout << sizeof(text3) << endl;//结果为7cout << sizeof(text4) << endl;//结果为8

        text3把对齐值设置为了1,所以int和short的对齐值都变成了1,也都可以放在任何位置,也就是所有数据在内存中是连续存储的。最后占的内存就是1+4+2 = 7个字节。7也是1的整数倍满足整体对齐。

text3结构体占用的内存空间
结构体变量偏移量存放的变量
0a
1b
2b
3b
4b
5c
6c

        text4把对齐值设置为了2,所以int的对齐值就变成了2,short还是2。然后int就要从偏移量2开始。

text4结构体占用的内存空间
结构体变量偏移量存放的变量
0a
1
2b
3b
4b
5b
6c
7c

3.4、内存对齐的用处

        内存对齐是一种优化技术,它对数据在内存中的排列进行调整,以提高访问效率和性能。以下是内存对齐的几个用途:

  1. 提高访问效率:内存对齐可以使得结构体成员在内存中按照自然边界对齐,减少内存访问的次数和开销。当数据按照对齐要求存储时,CPU可以直接读取整个对齐的数据块,而不需要多次读取多个不对齐的字节。

  2. 避免总线错误:某些计算机体系结构要求特定数据类型必须位于特定地址上。如果没有正确对齐,可能会产生总线错误,导致程序崩溃或产生不可确定的行为。

  3. 节省空间:内存对齐可能会引入填充字节来满足对齐要求,从而增加结构体的实际大小。然而,通过对齐对结构体进行布局,可以避免由于对齐问题产生的额外空间浪费。

  4. 兼容不同体系结构:不同的计算机体系结构对内存对齐有不同要求。进行内存对齐可以提高代码的可移植性,使得代码在不同的体系结构上能够正确地运行。

http://www.15wanjia.com/news/15166.html

相关文章:

  • 湛江网站建设与网页优秀网站网页设计图片
  • 长沙0731房地产网2019网站seo
  • 政府网站建设预算百度热搜风云榜
  • 如何在手机上自己制作软件福州网seo
  • 海报模板网站有哪些深圳疫情防控最新消息
  • 房地产做网站的意义网站查询域名ip
  • 毕业论文 网站开发百度代理推广
  • 做一款网站注意啥seo线下培训班
  • 做网站卖产品小红书广告投放平台
  • 长沙网络建站seo诊断分析在线工具
  • 做网站诱导充值犯法吗百度识图软件
  • 行业网站建设公司营销引流都有什么方法
  • 天津建站方案台州seo服务
  • 扬州做网站多少钱朝阳seo建站
  • 政府网站群建设免费软文网站
  • 万能搜索网站重庆网站推广专家
  • 医院建设网站要求分析 amp有什么可以做推广的软件
  • 做网站 经济诈骗无人在线观看高清视频单曲直播
  • 网站模板怎么用呢互联网广告代理加盟
  • 手机网站建设公司哪家好查收录网站
  • 网站 建设 方案广州谷歌seo
  • 电脑网站建设规划个人怎么做网络推广
  • 深圳建站公司企业启动互联全网营销推广
  • 安卓盒子 做网站模板网站
  • 濮阳网站制作提供seo服务
  • 做食品网站的素材镇江网站seo
  • 做跨境电商网站有哪些优化方案官方网站
  • 前端网站怎么做seo 优化公司
  • 做pc和移动网站的适配网站怎样优化关键词好
  • 网站的功能测试怎么做的什么是百度推广