博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++数据成员的内存布局
阅读量:4563 次
发布时间:2019-06-08

本文共 1216 字,大约阅读时间需要 4 分钟。

#include
 
<
iostream
>
using
 
namespace
 
std;
class
 
Test
{
public:
   
int
 
stra;
   
static
 
int
 
sta;//静态数据成员并不会介入对象内存布局。
   
int
 
strb;
   
int
 
strc;
};
int
 
Test::sta
 
=
 
1;
int
 
main()
{
   
int
 
a;
   
int
 
b;
   
int
 
c;
   
Test
 
s;
   
cout
 
<
<
 
"
局部变量
"
 
<<
 
&a
 
<<
endl
;
 
//函数里的局部变量先入栈的在高地址。
    cout
 
<<
 
"
局部变量
"
 
<<
 
&b
 
<<
endl
;
    cout
 
<<
 
"
局部变量
"
 
<<
 
&c
 
<<
endl
;
    cout
 
<<
endl
;
    cout
 
<<
 
"
类中非静态数据成员
"
 
<<
 
&s.stra
 
<<
endl
;
 
//class
struct
中的数据成员先声明的在低地址。
    cout
 
<<
 
"
类中静态数据成员
"
 
<<
 
&s.sta
 
<<
endl
;
 
 
 
//静态数据成员并不会介入对象内存布局。
    cout
 
<<
 
"
类中非静态数据成员
"
 
<<
 
&s.strb
 
<<
endl
;
    cout
 
<<
 
"
类中非静态数据成员
"
 
<<
 
&s.strc
 
<<
endl
;
 
 
 
return
 
0;
}
 

局部变量0x22ff4c

局部变量0x22ff48
局部变量0x22ff44

类中非静态数据成员0x22ff38

类中静态数据成员0x402000
类中非静态数据成员0x22ff3c
类中非静态数据成员0x22ff40

 
 
 
 

C++ Standard 要求,在同㆒个 access section  (也就是 private、public、protected 等

区段),members 的排列只需符合「较晚出现的 members 在 class object ㆗有较高的地址」 这㆒条件即可,各个 members 并不㆒定得连续排列。

 

1、同一个访问权限中,较晚出现的数据成员具有较高的地址;

2、数据成员并不一定连续排列;

3、静态数据成员并不会介入对象内存布局。

4、“vptr一般出现在数据成员的最后,但是也有编译器将其放在数据成员的最前面。”

5、C++ 标准允许不同访问权限的数据成员自由排列,如下例

z在内存布局中可能出现在y的前面,“但是据我所知,目前没有任何编译器这么做”。

class Point3d {

public:
// ...
private:
float x;
static List<Point3d*> *freeList;
private:
float y;
static const int chunkSize = 250;
private:
float z;
};

 

转载于:https://www.cnblogs.com/helloweworld/p/3174044.html

你可能感兴趣的文章
增长率超 100%!东软数据可视化到底什么样?
查看>>
JSP表单提交中文乱码
查看>>
GoF23种设计模式之行为型模式之责任链模式
查看>>
拨号进入防盗界面
查看>>
makefile学习经验(二)----编译生成静态库文件
查看>>
python装饰器
查看>>
HDUOJ---2082
查看>>
【2018.2.8-】网络流学习笔记(含ISAP!)
查看>>
【2019.3.2】NOI 模拟赛
查看>>
设计模式(3)----工厂方法模式
查看>>
Asp.net mvc + .net ef database first 或 model first 时如何添加验证特性
查看>>
Caused by: java.lang.ClassNotFoundException: HttpServletRequest
查看>>
C++primer plus第十章第5题
查看>>
SqlServer 之 查看表空间
查看>>
Python学习笔记(matplotlib篇)--使用matplotlib绘制直方图
查看>>
salesforce 零基础学习(二十一)workflow Q&A
查看>>
Leetcode 120: Triangle
查看>>
ACM模板——二分图
查看>>
【Java初探02】——Java语言基础
查看>>
leetcode 48. Rotate Image
查看>>