手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

c语言内存分配与指针讲解

时间:2024-10-13 06:47:57

1、下面列出C语言可执行程序的基本情况(Linux 2.6环境/GCC4.0)。

c语言内存分配与指针讲解

2、程序分为:代码区、数据区、bss区、堆区、栈区。平时常用区分的是代码区、堆区、栈区。下面加上例子区分一下。

c语言内存分配与指针讲解

3、代码区顾名思义就是存放代码的,里面的内容是不可以修改的。例如你定义了一个筐毙险裆变量char *buff = "锾攒揉敫abcdef";这个char型指针指向了代码区,这个指针里面的数据只可以被读取不可以别修改,因为指针指向了代码区,如果你继续往这个指针里面放东西,会报段错误。例如:buff[1] = 'a',这样会报错,段错误。因为上面已经将buff指向了代码区,代码区的数据是不可以改变的,但是你想要给buff[1]赋值,这时编译的时候不会报错,但是运行的时候会报段错误,这种错误对于初学者来说相当恶心,如果报段错误建议给我使用gdb调试。段错误大部分是因为内存使用错误。

c语言内存分配与指针讲解

4、栈区:系统分配,系统释放(跟堆区最重要的区别)。看图:正确的是因为指针指向了栈区,栈区的数据是可以改变的,所以第一个buff[1] = 'a';是正确的第二个是错误的(第二个指向了代码区)

c语言内存分配与指针讲解

5、堆区:说白了就是由程序员分配一块内存,然后往这娄壶狩匈块内存中写数据,栈区是系统分配内存然后往里面写数据,栈区是有系统释放,但是堆区的内存必须有程序员释放,不然会造成内存泄露(后果相当挣婊词丬严重,会造成死机现象)。C++中由new和delete来分配和释放,C中由malloc和free来分配和释放。

c语言内存分配与指针讲解

6、数据区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后由系统释放。BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。

c语言内存分配与指针讲解

7、总结:看下图:

c语言内存分配与指针讲解
© 手抄报圈