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

变量在内存中的存储

  • 内存
  • 2024-04-28 09:22:35
  • 6542

一、C语言中全局变量存放在内存空间中那个位置在C语言中,内存分配方式有以下三种形式:
1.从静态存储中分配
由编译器自动分配和释放,在程序启动时分配。编译内存,在程序执行过程中存在,直到整个程序结束才被释放,如全局变量和静态变量。
2.堆栈上的分配
也是由编译器自动分配和释放的。当函数执行时,可以在堆栈上创建函数内部的局部变量。当函数执行结束时,这些存储设备会自动释放。
需要注意的是,堆栈内存分配操作被集成到处理器的指令集中,一般来说其性能很高,但重新分配的内存量有限。
3.从堆分配
也称为动态内存分配,申请和释放由程序员手动完成。程序运行时,程序员使用内存分配函数(如malloc函数)来分配内存。一旦使用,程序员有责任使用内存释放函数(例如free函数)来释放内存。
需要注意的是,如果在堆上分配了内存空间,一定要及时释放,否则会导致运行程序出现内存泄漏等错误。
在C语言中,不同类型的变量的存储位置和作用域也不同。
全局变量
从静态存储中分配,它们的作用域是全局的,这意味着它们可以在程序的整个生命周期中使用。如果程序包含多个源文件,那么只要在一个文件中定义全局变量,就可以在所有其他文件中使用该全局变量,但必须使用externkey在其他文件中声明该全局变量。
全局静态变量
从静态存储中分配,其生命周期也与整个程序绑定,并从程序的开始到结束运行。与全局变量不同,全局静态变量的作用域仅在定义它的源文件内,不能被其他源文件使用。
局部变量
从栈中分配,作用域仅在定义该变量的局部函数内,只要该函数退出,该局部变量就会消失。工作时间更长,即变量和函数的生命周期是相同的。
局部静态变量
从静态存储中分配,并将在初始初始化后持续存在,直到程序结束。该变量的特点是其作用域仅在定义它的函数内可见,而在函数外不可见。


二、变量如何存储在内存中?可以通过三种方式为变量分配内存。
堆。常用的方法,手动分配(mallocnew)和大数组都是在堆区域分配。
堆栈(有时也称为堆栈,只是一个方法,基本上是一个堆栈)。函数参数、局部变量和临时变量都在堆栈上分配。访问速度很快。
注册。最快的访问速度。容量很小。有一些关键字来指定寄存器的分配。但最终由编译器决定是否对寄存器进行赋值。