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

C++数组,链表,二叉树的内存排列是什么样的,结构体占多大内存如何计算,类占多大内存如何计算,空类的空间是多少,为什么?

C++数组是连续存储的,C++数组元素依次存放在相邻的内存地址之中,并且内存大小相同。

C++链表是离散存储的,C++链表是由节点构成的,每个节点之中存在节点的值以及指向下一个节点的指针,每个节点是动态分配的。

C++二叉树也是离散存储的,C++二叉树由节点构成,每个节点包括节点的值以及指向左子树的指针和指向右子树的指针,每个节点是动态分配的。

在C++之中的结构体大小是由结构体之中数值的内存大小决定的同时受内存对齐的影响。(内存对齐是一种提高CPU对数据访问的一种高效的方法,这样CPU就可以访问到完整的数据。将数据存储到特定的内存地址上,使得数据的起始地址是其大小的整数倍,如果不是整数倍,则会在其中添加一些填充物使其对齐使之成为整数倍)

在C++之中类的内存由类内的非静态变量的大小决定,静态变量和非静态方法以及静态方法都不对其影响(静态变量和静态方法存储在内存之中和类的内存不同,静态方法不存在this指针,只能够调用静态变量,存在于全局之中,其生命周期贯穿整个程序,非静态方法由类的所有对象共享,调用非静态方法时,隐含的this指针指向实例对象,存储在代码段,所以不占据类的内存空间)

C++之中的空类占据的空间为1,为了表示给类对象分配了内存。

对于C#之中与C++的区别:

C#之中的数组也是连续分布的,数组是引用类型,与C++类似。

C#之中的链表和二叉树也是离散分布的,链表和二叉树通常是通过类对象实现的。

C#之中结构体是值类型,大小由结构体之中的变量决定,也存在内存对齐,具体对齐方式由编译器和硬件平台决定。

C#之中的类对象是引用类型,大小包括对象头和实例对象。

C#之中的空类占据的内存大小大于1,由于其包括对象头等内容。

相关文章:

  • Linux进程概念(二)
  • 若依vue前端queryParams搜索下拉框无法重置或者重置值有问题
  • SpringBoot(一)--搭建架构5种方法
  • 基于控制障碍函数(Control Barrier Function)的二次规划(QP)控制
  • Good Bye 2013 F. New Year Tree 倍增、思维
  • 原函数存在定理
  • 一个基于C语言的猜数字小游戏
  • 【打卡day3】字符串类
  • clickhouse查询效率低
  • C++之list
  • SpringBoot POST和GET请求
  • 【算法】大数据查重
  • 庞加莱映射的性质
  • vs code 设置字体颜色
  • 深入了解蓝牙广播与扫描响应
  • Codeforces Round 258 (Div. 2) E. Devu and Flowers 生成函数
  • 四、云原生应用监控-Etcd
  • IMX6ULL的最简单的LED驱动程序
  • 南开提出1Prompt1Story,无需训练,可通过单个连接提示实现一致的文本到图像生成。
  • 掌握Linux基础:从文件链接到Shell命令的全面指南
  • 锚定建设“中国樱桃第一县”目标,第六届澄城樱桃营销季启动
  • 三部门印发《2025年深入推进IPv6规模部署和应用工作要点》
  • 海南医科大披露校内竞聘上岗结果:32名干部离开领导岗位,8人系落选
  • 王毅同丹麦外交大臣拉斯穆森会谈
  • 国新办10时将举行新闻发布会,介绍4月份国民经济运行情况
  • 女子应聘文员被说“太丑”?官方回应:有关部门启动核查处置