C++ 内存布局占用情况
2015-08-20 10:35
351 查看
C++ 中内存分布比较复杂,主要分为堆、栈、.data区、代码段,在平时会涉及到一个类的内存大小,总结如下:
1. 普通的成员函数不会占内存,但是普通的成员变量占内存。
2. Static的变量和函数都不会占内存。static数据存放于.data区中,并不在堆栈中。
3. Virtual成员函数(包括纯虚函数)会占内存,因为会有一个vptr指向virtual
table的原因,所以不管有多少个virtual函数,均只占一个sizeof(vptr)=4
4. 派生类:需要加上其基类的size
5. 空类中,编译器会自动加入一个字节。这么做是为了保证每个对象都有唯一的内存地址。例如:A 声明了b,c对象,如果不添加一个字节,b,c的起始地址会发生冲突。
1. 普通的成员函数不会占内存,但是普通的成员变量占内存。
2. Static的变量和函数都不会占内存。static数据存放于.data区中,并不在堆栈中。
3. Virtual成员函数(包括纯虚函数)会占内存,因为会有一个vptr指向virtual
table的原因,所以不管有多少个virtual函数,均只占一个sizeof(vptr)=4
4. 派生类:需要加上其基类的size
5. 空类中,编译器会自动加入一个字节。这么做是为了保证每个对象都有唯一的内存地址。例如:A 声明了b,c对象,如果不添加一个字节,b,c的起始地址会发生冲突。
相关文章推荐
- char和unsigned char强制转换成int后的差异
- C++中vector使用详细说明
- c++ primer 学习笔记-第十一章
- C++中嵌入IE浏览器(二)
- C++中嵌入IE浏览器(一)
- 如何在android 系统 C/C++ 层中添加 log 信息
- [leetcode] Length of Last Word C语言
- 深入理解C语言指针的奥秘(转)
- [leetcode-145]Binary Tree Postorder Traversal(c++)
- C++ Primer 学习笔记(第四章:表达式)
- C语言strtoul()函数:将字符串转换成unsigned long(无符号长整型数)
- C++ Primer 学习笔记(第三章:字符串、向量和数组)
- [leetcode]Roman to Integer C语言
- C++ Primer 学习笔记(第二章:变量和基本类型)
- C语言的结构体、联合和枚举
- VC++深入详解——第16章:线程同步,关键代码段
- [leetcode]Valid Palindrome C语言
- [leetcode-144]Binary Tree Preorder Traversal(c++)
- C++ 复合数据类型--枚举型用法深解
- C语言格式化输出(整理2)