8 堆,栈与内存管理

57 阅读1分钟

所谓stack 所谓heap

  • stack是存在于某一个作用域的内存空间,例如函数栈
  • heap是由操作系统提供的一块全局的内存空间

stack objects的生命期

image.png

static local objects的生命期

image.png

global objects

视为static objects的一种,生命周期是整个程序

image.png

heap objects的生命周期

  • 在某个作用域动态分配了内存空间 离开作用域一定要清楚掉
  • 下图 指针p是一个stack local object 离开scope会灭亡,但所指内存空间不会,会造成memory leak

image.png

new 会先分配memory再 call ctor

image.png

delete 先call dtor 再 释放内存

image.png

动态分配内存块 in VC

  • 调试模式会附加内容(灰色)
  • 红色的cookie表示该块内存大小 最后一位1表示由操作系统分配来 0表示相反
  • 会有内存对齐的现象 附加绿色的pad 使得每一块的大小都是16的正整数倍

image.png

动态分配 array

image.png

array一定要搭配 array delete

image.png