文章目录
类
C++中可以使用struct、class来定义一个类
struct和class的区别
struct的默认成员权限是public
class的默认成员权限是private
实际开发中,用class表示类比较多
变量名规范参考
全局变量:g_
成员变量:m_
静态变量:s_
常量:c_
使用驼峰标识
类实例化成为了对象,对象的内存空间由成员变量决定
对象的内存都是在函数的栈空间,自动分配和回收的
每个对象都有自己的成员变量,每次创建分配各自的内存
但是类里的函数(方法)每个对象都可以调用,所以没有必要存放在每个对象的空间里,每个方法在内存中只有一份
编译器发现有调用这个方法,就在内存中生成这个方法的地址,当对象调用时直接call 函数地址,若没有发现调用这个方法,就不编译,这实际是编译器的优化。
对象
查看对象的内存大小
查看对象及成员变量的内存地址
对象的内存布局
每个应用都有自己独立的内存空间,其内存空间一般都有以下几大区域
代码段(代码区)
用于存放代码,如main函数和其他函数
数据段(全局区)
用于存放全局变量等
栈空间
每调用一个函数就会给它分配一段连续的栈空间,等函数调用完毕后会自动回收这段栈空间
自动分配和回收
堆空间
需要主动去申请和释放
调用函数就是CPU访问代码区的机器指令,代码区只是存放代码且是只读的,函数的局部变量是可以更改的,所以调用函数的时候需要分配额外的存储空间去存储函数内部的局部变量,所以就需要代码区的函数访问到了栈空间里的对象的成员,这就需要this
this
this是指向当前对象的指针,存储着函数调用者的地址
对象在调用成员函数的时候,会自动传入当前对象的内存地址
没有this的时候
不管person对象在哪个空间,在执行代码段时都能访问到
+上this
汇编代码
this指针必须用->,不能用. (点左边只能是对象),可省略(语法上默认用了this)
指针间接访问所指向对象的成员变量:
1.从指针中取出对象的地址
2.利用对象的地址+成员变量的偏移量计算出成员变量的地址
函数调用栈时,用0xcc去填充栈空间,用它来覆盖以前栈空间剩余的垃圾数据,0xcc表示int 3(中断,起到断点的作用) 超出函数栈空间内存区域的值用0xcc表示,
上面四个是寄存器的值,不属于栈空间