c语言哪些占程序空间哪些占内存空间

Python016

c语言哪些占程序空间哪些占内存空间,第1张

一个由C/C++编译的程序占用的内存分别为以下四个部分:

程序代码区:存放程序的二进制代码。

静态数据区:存放程序运行期间用到的数据。其存储空间是在编译时分配的,在整个程序执行期间静态数据区中的数据一直存在,程序结束后由系统释放。

动态内存区(也称栈):也存放程序运行期间用到的数据,其存储空间在程序运行期间由编译器自动分配释放,其生命周期短于程序的运行期。

堆区:由程序员分配释放,若程序员不释放,程序结束时可能由系统回收。

以上内容抄自课本《C语言与程序设计》(电子工业出版社)

有必要,在C语言的开发中,内存管理是十分重要的,要非常注重对动态内存的管理,否则轻易就能写出栈溢出、内存泄漏等等bug。

计算机四区

计算机中,内存是分区管理的,主要分为四大区:静态存储区、代码存储区、栈存储区和堆存储区。

1.静态存储区:

静态存储区是由操作系统自行分配,并使用的,通常用于存储静态变量和全局变量,静态变量就是static修饰的变量,而全局变量就是代码块{}以外定义声明的变量

区别:C语言把内存划分成四个区,它把一般的变量和数组等存在于内存中的栈区,所以数组在C语言的定义中只是一组同类型的普通变量,即使这个变量有可能是指针。所以他的作用比指针小的很多,而指针可以指向任何区的任何数据,所以就会觉得指针和数组名很像,但是必须要注意的是,数组名只是指针中的一种,它是指针中只指向栈区的且指针的移动范围是有限的,即数组长度。而且数组在定义之初就已经有了自己的内存,一般的指针如果未指向某一个内存块时,它是没有自己的内存的,即所谓的野指针。

联系:如上面所说,数组只是定义在栈区的一个连续变量,它的首地址就是一个指针。

总结:不仅数组有指针,所有变量都有指针,指针说白了就是内存中的地址,就像一个房间必须有一个房间号。在C/C++语言中定义一个指针,就是在栈区开辟一个内存空间用来存放它指向的内存地址,然后给指针赋值,就是把地址值赋值给刚才开辟的内存空间,然后通过访问该内存中的地址值来间接访问该地址下存放的数据。如果该地址值指向的是一块静态存储区,如字符串常量等,当然就不可以修改指向的内容啦。

经验之谈,楼楼加分啊