sizeof 运算结果与编译系统有关
研究与实现相关的layout没多大意义
情况1:《剑指offer》纪念版题,sizoef(空类)的结果?
class A{};
sizeof(A);
问sizeof结果?
对空类运用sizoef operator,表达式结果是多少?不是0,空类中没有信息,但实例仍需要在内存中有一些信息,这样才能使用,类的内存布局由编译器决定,vs中占用1字节。如果空类中含有虚函数,在类的实例中会添加指向虚函数的指针,指针在32位机器上占用4bytes,64(x64编译模式)位占用8字节。int在c++标准中没有规定具体大小,所以在不同平台上 sizeof(int) 也会不同。
情况2:sizeof(string)的大小?
这与实现有关。vs下string有短字符串优化,string含有一个缓冲区。sizeof作用于类类型结果未定义,implemtation defined,既由实现定义的。
情况3:sizeof(struct)的大小?
struct s
{
int a;
char c;
double d;
}
结果并不是int+char+double的大小和,因为memory alignment,按照struct alignment的对齐规则,实际需要的内存多。
情况4: malloc为类类型分配动态内存:
string *q = (string*)malloc(sizeof(string) * );
*q = "djd";
会发生运行错误。malloc只分配了内存,不会调用string的构造函数做初始化。语句2为什么不能完成初始化呢?推测原因是sizeof只求了vs下string类的内存布局大小,malloc没有为一个string分配属于它的内存空间——用于存字符串序列 。联想到allocator类分配的内存是未初始化的,如果不用construct()构造内存,无法使用。
allocator<string> alloc;
string *strp = alloc.allocate()
*strp = "djka";
alloc.construct(strp, ".jj");
语句3 error
sizeof 运算结果与编译系统有关的更多相关文章
- 聊聊 C 语言中的 sizeof 运算
聊聊 sizeof 运算 在这两次的课上,同学们已经学到了数组了.下面几节课,应该就会学习到指针.这个速度的确是很快的. 对于同学们来说,暂时应该也有些概念理解起来可能会比较的吃力. 先说一个概念叫内 ...
- C语言 malloc()与sizeof运算的盲点
//malloc()与sizeof运算的盲点 #include <stdio.h> #include <stdlib.h> #include <string.h> ...
- 全面解析sizeof(上) 分类: C/C++ StudyNotes 2015-06-15 10:18 188人阅读 评论(0) 收藏
以下代码使用平台是Windows7 64bits+VS2012. sizeof是C/C++中的一个操作符(operator),其作用就是返回一个对象或者类型所占的内存字节数,使用频繁,有必须对齐有个全 ...
- C++面试中关于sizeof问题总结
原文:http://blog.sina.com.cn/s/blog_7c983ca60100yfdv.html#SinaEditor_Temp_FontName (1) sizeof是操作符 ...
- Sizeof的计算看内存分配
本文记录了有关sizeof的一些计算,主要有下面的四种情况:(如有错误,敬请留言) 使用sizeof()计算普通变量所占用的内存空间 sizeof计算类对象所占用空间的大小-用到了字节对齐 sixeo ...
- C\C++ sizeof 陷阱&&总结
今天使用动态数组,本来想通过sizeof 获取动态数据,结果出现了错误. 先对自己做个测试,能做出下面这个题目,并做出合理解释,可以不用往下看了. ][]; cout<< cout< ...
- C语言strlen函数和sizeof操作符
字符'x'于字符串"x"的区别 'x' 属于基本类型(char)字符类型-----------------由1个字符组成('x') "x"属于派生类型(char ...
- 坑爹系列:sizeof运算符
C语言里的sizeof关键字用于返回变量的类型宽度(变量所占的字节个数).例如: #include <stdio.h> int main() { int i = 0; int size = ...
- C++ sizeof操作符的用法和strlen函数的区别
摘要:本人首先介绍了C++中sizeof操作符的用法和注意事项,其次对比了和strlen的区别和使用,方便大家在写代码的时候查阅,和面试.笔试的时候复习. 目录: sizeof的用法: sizeof和 ...
随机推荐
- 《JAVA设计模式》之观察者模式(Observer)
在阎宏博士的<JAVA与模式>一书中开头是这样描述观察者(Observer)模式的: 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Mo ...
- for in 和for of的区别
for in 和for of的区别:https://www.jianshu.com/p/c43f418d6bf0 1 遍历数组通常用for循环 ES5的话也可以使用forEach,ES5具有遍历数组功 ...
- Java中的容器(集合)之HashMap源码解析
1.HashMap源码解析(JDK8) 基础原理: 对比上一篇<Java中的容器(集合)之ArrayList源码解析>而言,本篇只解析HashMap常用的核心方法的源码. HashMap是 ...
- python学习第二十二天文件byte类型
所有的文件在计算机里面存储为二进制形式,但是我们有时候有需要将二进制转换为gbk或者utf-8形式,编码的时候encode 解码的时候decode ,下面简单阐述python二进制在文件传输过程的作用 ...
- CodeForces 295B Greg and Graph (floyd+离线)
<题目链接> 题目大意:给定$n$个点的有向完全带权图$(n\leq500)$,现在进行$n$次操作,每次操作从图中删除一个点(每删除一个点,都会将与它相关联的边都删除),问你每次删点之前 ...
- JavaScript面向对象编程(2)-- 类的定义
最近这一段时间事情太多了,没有时间再继续写,幸好这两天有点小闲,先小写一下JavaScript中面向对象一中推荐的方法.本文承接上一篇JavaScript面向对象编程(1) -- 基础. 上篇说过,J ...
- 自定义的最简单的可回调的线程任务CallbackableFeatureTask(模仿google的ListenableFutureTask)
1.使该Task继承Callable,Runable import java.util.concurrent.Callable; import java.util.function.Consumer; ...
- 135-基于TMS320C6678、FPGA XC5VSX95T的2路Full模式Camera Link输入双目视觉处理平台
基于TMS320C6678.FPGA XC5VSX95T的2路Full模式Camera Link输入双目视觉处理平台 一.板卡概述 本板卡由我公司自主研发,基于CPCI架构,符合CPCI2.0标准,采 ...
- vue,一路走来(2)--路由vue-router
安装 Mint UI cnpm install mint-ui --save 如果你的项目会用到 Mint UI 里较多的组件,最简单的方法就是把它们全部引入.此时需要在入口文件 main.js 中: ...
- 二、小程序内嵌Html基础格式说明
1.index.js文件更改 var WxParse = require('../../wxParse/wxParse.js'); Page({ data: { }, onLoad: function ...