Linux进程地址空间
典型的Linux进程地址空间(虚拟地址)布局如下图,栈从上往下增长,堆从下往上增长。
对于32位Linux系统而言,其地址总线宽度为32位,4字节对齐,可寻址范围为4GB。进程地址空间中高1GB为内核地址空间,低3GB为用户地址空间。
对于64位Linux系统而言,其地址总线通常为48位,8字节对齐,可寻址范围为256TB。进程地址空间中高128TB为内核地址空间,低128TB为用户地址空间。
栈一般是函数调用栈,函数调用时,将父函数的局部变量、临时变量、LR和PC寄存器值压栈,并为子函数创建新的栈帧。堆则用于动态内存分配,比如通过malloc()函数分配内存。
glibc和ptmalloc
用户态堆