当前位置:首页 > 内存 > 正文

程序的内存分配方式

  • 内存
  • 2024-07-04 20:47:52
  • 7840

一、C语言中全局变量存放在内存空间中那个位置在C语言中,内存分配方式有以下三种形式:
1从静态存储区分配
由编译器自动分配和释放,程序运行时就已经分配了。编译后的内存,这块内存存在于整个程序中,直到整个程序结束才被释放,比如全局变量和静态变量。
2栈上的分配
也是由编译器函数执行结束自动分配和释放的,这些存储单元是自动释放的。
需要注意的是,堆栈内存分配操作内置于处理器的指令集中。运行效率一般很高,但分配的内存容量有限。
3.从堆分配
也称为动态内存分配,申请和释放由程序员手动完成。程序运行时,程序员使用内存分配函数(如malloc函数)来申请内存,使用完后,程序员负责使用内存释放函数(如free函数)来释放内存。
需要注意的是,如果在堆上分配了内存空间,一定要及时释放,否则会导致运行程序出现内存泄漏等错误。
在C语言中,不同类型的变量的存储位置和作用域也不同。
全局变量
从静态存储区分配,其作用域为全局作用域,即在程序的整个生命周期内都可以使用。如果程序由多个源文件组成,则全局变量只要在一个文件中定义,就可以在所有其他文件中使用,但在其他文件中必须使用extern关键字声明全局变量。
全局静态变量
从静态存储区分配,其生命周期也与整个程序有关,从程序开始到结束都有效。与全局变量不同,全局静态变量的作用域仅在定义它的源文件内,不能被其他源文件使用。
局部变量
从栈中分配,其作用域仅在局部函数内,在定义该变量的函数内,只要函数终止,局部变量就不再存在work也就是变量和函数相同之前的生命周期。
局部静态变量
从静态存储区分配,在第一次初始化后一直存在,直到程序结束。该变量的特点是作用域仅在定义它的函数内可见,在函数外不可见。