一、C++程序设计–编译链接原理
进程虚拟地址空间
前提:32位CPU 32位linux内核
2^32(4G)的虚拟地址空间,分别包括用户空间(3G)和内核空间(1G),每一个进程用户空间是私有的,内核空间是共享的
用户空间:0x08048000开始 .text .rodata .data .bss heap 共享库区域(*.so) stack 命令行参数 环
境变量PATH
内核空间:ZONE_DMA(16M) Direct Memory Access ZONE_NORMAL(896M) .text .rodata. heap stack
ZONE_HIGHMEM(高端内存 用户空间采用的地址映射方式是二级页表映射,而内核空间的地址映射方式采用的线性映射,那么1G以上的物理内存如何进行映射,就靠这块高端内存区域了)
堆内存heap分配,从低地址 到 高地址;栈内存stack的分配,从高地址到低地址。data段的内存程序
启动时候分配,程序运行结束内存释放;heap内存是在调用new或者malloc的时候分配,调用delete或者free的时候释放;调用函数分配新的栈空间,函数出右括号占内存释放。
32位linux创建进程fork(资源划分的单位)的上限:0-32767 进程间的通信(匿名管道、命令管道、消息队列、共享内存、信号量);创建线程pthread_create,一个进程创建线程的上限数量是多少(线程栈的大小是8M),3G / 8M = 384 ,如果如何提高进程里面创建