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和 ...
随机推荐
- Python入门习题6.猜数游戏和其异常处理
例6:在程序中预设一个0~9之间的整数,让用户通过键盘输入所猜的数,如果大于预设的数,显示“遗憾,太大了”:小于预设的数,显示“遗憾,太小了”,如此循环,直至猜中数,显示”预测N次,猜中了”,其中N是 ...
- proxool连接池配置方法
proxool.properties: jdbc-1.proxool.alias=test #jdbc-1.proxool.driver-class=com.mysql.jdbc.Driver #jd ...
- 解决java.net.BindException: Address already in use(Bind failed)端口占用问题
问题描述: 解决办法: sudo lsof -i:20101ps -ef|grep 9905kill -9 9905ps -ef|grep 9905 ------------------------- ...
- java静态方法使用泛型
用法 import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.ut ...
- css样式表的引入方式
一般来说,css 有两种样式表的引入方式,在这里我记录一下,比较这两种引入方式的区别: <link rel="stylesheet" type="text/css& ...
- navigate连接不上Centos7+mariadb的问题
链接数据库时忽然遇到一个问题.Mac Navicat链接时报错Can’t connect to MySQL server on ‘xx.xx.xx.xx’ (61). PS. win版Navicat ...
- R语言控制流
一般来说R语言是自上而下执行的,但是遇到特殊情况可能用到循环执行某些语句,这时候条件运算和循环就能派上用场了.
- setup PC not sleep when turn off display
- 【LeetCode】拓扑排序 topological-sort(共5题)
[207]Course Schedule [210]Course Schedule II [269]Alien Dictionary [329]Longest Increasing Path in a ...
- ARC093F Dark Horse 容斥原理+DP
题目传送门 https://atcoder.jp/contests/arc093/tasks/arc093_d 题解 由于不论 \(1\) 在哪个位置,一轮轮下来,基本上过程都是相似的,所以不妨假设 ...