- 由于C++需要程序员自己完成堆区的内存回收,因此有可能存在内存泄漏的风险。而Java、Python不需要程序员去考虑内存泄漏的问题,虚拟机都做了内存管理。
- 只要可以跨平台的编程语言都需要做内存对齐,C++、Java、Python都是一样的。
内存的定义
程序运行时所需的内存空间分为 固定部分,和可变部分,如下:
内存泄漏
在可变部分中,栈区间的数据在代码块执行结束之后,系统会自动回收,而堆区间数据是需要程序员自己回收,所以也就是造成内存泄漏的发源地。
内存对齐
编译器一般都会做内存对齐的优化操作,也就是说当考虑程序真正占用的内存大小的时候,需要认识到内存对齐的影响
不同类型的变量紧邻的连续存放,没有空间浪费,但CPU访问内存的速度慢。
寻址过程:
- 因为CPU是四个字节四个字节来寻址,首先CPU读取0,1,2,3处的四个字节数据
- CPU读取4,5,6,7处的四个字节数据
- 合并地址1,2