C语言占用的内存可以分为5个区:
①、Bss段(Bss Segment):通常是指用来存放程序中未初始化的全局变量的一块内存区域,属于静态内存分配。
②、Data段(Data Segement):通常是指用来存放程序中已初始化的全局变量和static声明的局部变量的一块内存区域,属于静态内存分配。
③、Text段(Text Segment):通常是指用来存放程序执行代码的一块内存区域,这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
④、堆(Heap):通常是指用来存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。
⑤、栈(Stack):通常是指用来用存放程序临时创建的户局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,函数参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进后出(FILO)特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把栈看成一个寄存、交换临时数据的内存区。
一个程序本质上都是由 Bss段、Data段、Text段三个组成的。
示例 - 程序1:
int ar[30000];
void main()
{......
}
示例 - 程序2
int ar[300000] = {1, 2, 3, 4, 5, 6 };
void main()
{......
}
说明:
本文发布于:2024-01-28 07:12:51,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063971795703.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |