一、Alignment问题

重新发现这个问题是因为在体系结构课上提到的一个概念,alignment对齐的概念。

像上面这个C++的类,它有两个变量。

或者直接算它的大小

然后按照道理,myclass的大小,应该是5 byte才对,可是最后输出的结果是8,显然这就说明系统在创建对象的时候,将对象的变量进行了对齐操作,不足4 byte的按照4 byte补足。

2.1 虚函数引起的空间占用:虚函数管理

此外,普通成员函数不会占用对象空间的大小,也不会影响sizeof的结果。

而如果是虚函数就会占用空间了。

结果是占用12 byte的大小。

这种的差别是由于c++的类所有的虚函数都是由一个虚函数指针所管理,它的虚函数被放在别的内存空间中管理。而普通函数是由this指针所管理,this指针并不是对象本身的一部分,所以不会影响到sizeof的结果。

2.2 一些有趣的现象

(1)空类的sizeof为1

(2)只有一个char的类的大小为1

(3)当有一个为char,另一个是虚函数或者int类型成员变量,会出现对齐现象,大小为8。对齐现象很有意思,它的规则是:以最长的变量长度为对齐长度

long long为8 byte,所以总共占用16 byte。

在分析完各种情况之后,只有第一个的结果显得特别诡异,为什么空类的大小不是0,而是1?

每个类的实例,在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址。------《深度探索c++对象模型》

二、用new与不用new创建对象的区别

内存分配有三种方式:

(1)从静态存储区域分配,内存在编译期间就已经分配好,这块内存在整个运行期间都存在,例如static变量。

(2)从栈上创建:函数内局部变量,自动分配与回收,效率高,但是分配的内存量有限。

(3)从堆上创建:由程序员控制,malloc、new,free、delete。

学习C/C++编程,提升自己的编程能力,欢迎关注博主的微信公众号:C语言编程学习基地,一起来学习吧!

C++编程笔记:C++用new与不用new创建对象的区别相关推荐

  1. linux shell脚本编程笔记(三): 三种引号的区别

    双引号.单引号.反引号的区别 测试用例: OPDATE=`date -d '-1 day' +%Y%m%d` for i in $(seq 10) do FILEDATE=`date -d " ...

  2. C# 求取圆心/球心坐标 ∈ C# 编程笔记

    [日志] 最新版本见于"整个源码"部分,其他部分还是首发代码. 6.12 首发此篇博客,球心坐标算法有问题待解决 6.21 优化了代码:求圆心算法简化了一下:求心前先重心化,计算的 ...

  3. 数控加工仿真系统 - FANUC OI 铣床编程笔记(下)

    上篇:数控加工仿真系统 - FANUC OI 铣床编程笔记(上) 上篇主要记录了铣床编程模板和大致程序的样式,使用软件前的准备工作,程序的CUSTOM GRAPH使用(主要用来测试程序的图案对错),程 ...

  4. 道路曲线线路坐标计算 ∈ C# 编程笔记

    更新日期:2020/5/17 文章目录 3.曲线线路坐标计算 3.1 圆曲线 3.1.1 原理 3.1.2 代码实现: 3.1.3 调用示例: 3.2 带缓和曲线的圆曲线 3.2.1 原理 3.2.2 ...

  5. 贪吃蛇统计分数的c语言代码,C/C++编程笔记:C语言贪吃蛇源代码控制台(二),分数和食物!...

    接上文<C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!>如果你在学习C语言开发贪吃蛇的话,零基础建议从上一篇开始哦!接下来正式开始吧! 三.蛇的运动 上次我已经教大家画 ...

  6. 【C++提高编程笔记】三.(一).STL常用容器之string容器

    文章目录 1.string基本概念 2.string构造函数 3.string赋值操作 4.string字符串拼接 5.string查找和替换 6.string字符串比较 7.string字符存取 8 ...

  7. 响应式编程笔记(二):代码编写

    2019独角兽企业重金招聘Python工程师标准>>> 响应式编程笔记(二):代码编写 博客分类: 架构 原文:Notes on Reactive Programming Part ...

  8. NDK 高级编程(笔记)

    Android 开发中针对 NDK 的书籍很少,<Pro Android C++ with the NDK>也是出版的比较早的一本书,有些内容可能对现在的开发并不适用.但是书中介绍的内容比 ...

  9. Java网络编程笔记5

    在Java网络编程笔记4中我们看到了客户端与服务器通信的过程,只是在前面的程序只是单个客户端与服务器通信 的例子. 接下来我们看如何实现多个客户端与服务器通信,对于服务器来说,它要为每个客户端请求的S ...

最新文章

  1. 做一个像Keras在线技术文档(Sphinx + GitHub + Read the Docs)
  2. async function_Electron IPC 通信如何使用 async/await 调用?
  3. More is better
  4. boost::math::daubechies_scaling用法的测试程序
  5. 485 九针头_三代德玛莎针头 九针头 十三针头 9针头 13针头 原装进口
  6. HTTP Developer's Handbook Part V: Security 读书笔记
  7. 48 CO配置-控制-获利能力分析-创建经营组织
  8. iview 3.x 升级指南 —— Icon 篇
  9. 快看这个机器人,在使用双截棍!| 附正经paper
  10. 论文笔记_S2D.17-2018-ECCV-通过卷积空间传播网络(CSPN)的相似性学习进行深度估计
  11. 多摩川读写EEPROM以及并口实现
  12. 较新颖的智能优化算法
  13. Vue工程测试Element-UI插件是否可用步骤
  14. 微信活码系统程序源码
  15. 企业电子招投标系统简介 招投标系统源码 定制化服务 二次开发 java招投标系统 招投标系统功能设计
  16. 焱融科技与趋动科技携手解决一站式存算难
  17. 北京大学,南下布局!
  18. 中国移动首次明确的LTE终端频率要求
  19. Python OJ输入输出
  20. 手机如何修改MD5视频?修改MD5视频的办法你清楚吗?

热门文章

  1. 梦幻西游手游服务器维护公告,梦幻西游手游3月7日全区全服维护更新公告
  2. Puppeteer保存html,PuppeteerSharp读取页面完整HTML(.NetCore)
  3. 获得代理ippython_Python搭建代理IP池实现获取IP的方法
  4. pythongui做计算器_python 实现简单的计算器(gui界面)
  5. android 通知_Android 全局消息通知框架实现(类似EventBus)
  6. httpservletrequest 设置请求头_请求和常用对象
  7. 遍历列表python_Python 遍历List的三种方法
  8. 木炭怎么获得_木炭机一体化流程中制做木炭是怎么完成的
  9. Eclipse和IDEA 简单对比说明
  10. Shell 基础介绍 [1]