-
内存分布
- 栈:又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的;
- 内存映射段:是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享内存,做进程间通信;
- 堆:用于程序运行时动态内存分配,堆是可以向上增长的;
- 数据段:存储全局数据和静态数据;
- 代码段:可执行的代码/只读常量;
程序在Linux上是如何被编译后运行起来的?
- 编写的代码是存在文件系统上的的;
- 编译器去读这个程序,通过编译链接生成二进制可执行程序a.out;
- ./a.out在一个终端下去运行程序,运行程序a.out相当于终端创建了一个子进程,exec对创建的子进程进行替换,替换成a.out
c语言中动态内存管理方式:malloc/calloc/realloc的区别?
malloc申请空间,calloc申请空间并初始化为0,realloc在原有空间上进行扩容;