在C中编写的程序所占用的主要分为以下几个部分:
* 栈(stack):由编译器自动分配与释放,存放函数的参数值、局部变量的值、返回地址等,它的操作方式类似于数据结构中的栈。
* 堆(heap):一般由程序员动态分配(如调用malloc函数)和释放(调用free函数),若程序员不释放,程序结束时可能由操作系统回收(慎重)。
* 数据段(data):存放的是全局变量、静态变量、常数。根据存放的数据,数据段又可以分为普通数据段 (包括可读可写/只读数据段,存放静态初始化的全局变量或常量)、BSS数据段(存放未初始化的全局变量)。
* 代码段(code):用于存放程序的代码。
示例:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int a = 0; //可读可写数据段
- char *p1; //BSS段
- int main()
- {
- int b; /*b 在栈中*/
- char *p2; /*p2 在栈中*/
- char *p3 = "123"; /*123 在常量区,p3在栈中*/
- char str[] = "abc"; /*str 在栈中,abc 在常量区*/
- static int c = 0; /*可读可写数据段*/
-
- p1 = (char *)malloc(10); /*分配得来的10字节的区域在堆中*/
- p2 = (char *)malloc(20); /*分配得来的20字节在堆中*/
- /*将常量区“hello world” 字符串复制到刚分配的堆中*/
- strcpy(p1, "helloworld");
- return 0;
- }
阅读(1444) | 评论(3) | 转发(0) |