C/C++ | 变量的内存分配

C/C++ 程序占用的内存分布:

  栈区(stack): 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 
  堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
  全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放 
  文字常量区:常量字符串就是放在这里的。 程序结束后由系统释放 
  程序代码区:存放函数体的二进制代码

一个正常的程序在内存中通常分为程序段,数据端和堆栈三部分。程序段里放着程序的机器码和只读数据,这个段通常是只读,对它的写操作是非法的。数据段放的是程序中的静态数据。动态数据则通过堆栈来存放。在内存中,它们的位置如下: 
+------------------+ 内存低端 
| 程序段 | 
|------------------| 
| 数据段 | 
|------------------| 
| 堆栈 | 
+------------------+ 内存高端

详细:http://blog.csdn.net/yefengnidie/article/details/7711144

时间: 2024-10-17 21:00:52

C/C++ | 变量的内存分配的相关文章

Java变量以及内存分配

Java变量以及内存分配(非常重要) 堆栈 静态存储区域 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收.注意它与数据结构中的堆是两回事,分配方式倒是类似于链表. 3.全局区(静态区)(static)— 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的

C语言变量声明内存分配

转载: C语言变量声明内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.程序结束时由编译器自动释放. 2.堆区(heap) — 在内存开辟另一块存储区域.一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵. 3.全局区(静态区)(static)—编译器编译时即分配内存.全局变量和静态变量

数组的引用变量和内存分配

数组是一种引用类型,数组用来存储同一种数据类型的数据,一旦初始化完成,即所占的空间就已固定下来,即使某个元素被清空,但其所在空间仍然保留,因此数组长度将不能被改变. 数组变量只有分配内存空间后才可以使用. 数组初始化分为静态初始化(在定义时就指定数组元素的值,此时不能指定数组长度,否则就出现了静态加动态混搭初始化数组了) 动态初始化(只指定数组长度,由系统分配初始值,初始值根据定义的数据类型来). 不要出现静态初始化跟动态初始化混搭比如new int[4]{1,3,4,5} public cla

变量、参数和内存分配

变量的类型 按作用范围可以把变量分为局部变量和全局变量 参数的类型 实参和形参 变量的内存分配——静态和动态 静态变量的声明关键字:static 动态变量的声明,内存的动态分配可以使用函数malloc(字节数) 栈机制——运行时内存布局(Runtime Memory Layout) 一个程序要运行,就要先将可执行文件装载到计算机内存中.装载是操作系统掌控的,一般而言,操作系统将程序装入内存后,将形成一个随时可以运行的进程空间,改进程空间分四个区域,由上到下为:代码区(code area).全局数

iOS内存分配五大区:

iOS内存分配五大区: 栈区,堆区,静态区(全局区),常量区,代码区 动态数据区一般就是”堆栈”,栈是线性结构,堆是链式结构. 本地变量在堆栈中.通过堆栈的基地址和偏移量来访问本地变量 动态内存分配有系统根据程序需要即时分配,且分配的大小就是程序要求的大小. 全局变量(一般用static修饰的变量)和静态变量分配在静态区(需要预先分配存储空间) 静态内存分配:分配固定大小的内存分配方法,大多情况下会浪费大量的内存空间,少数情况下,当定义的数组不够大时,会引起越界. 局部变量采用栈的方式存放

C-数组, 字符串的输入输出, 内存分配, 三种内存分配函数

数组初始化 1.数组初始化的时候, 可以这样 1 int len = 3; 2 int arr[len]; 2.但是这样不可以: 1 int len = 3; 2 int arr[len] = {1, 2, 3}; 3.但是可以这样: 1 int arr[3] = {1, 2, 3}; 2不可以的原因: 编译器编译的时候 int arr[3] = {1, 2, 3}这种方式会转换成: 1 int arr[3]; 2 arr[0] = 1; 3 arr[1] = 2; 4 arr[2] = 3;

java内存分配实例

在java内存分配中,静态变量是在运行时JVM只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配. 静态变量只属于某个类,不属于对象,所以通过类名访问.而不是静态变量就需要创建对象,然后再分配内存空间,再通过内存名去访问. public class Student{ public String name; public static int studentCount; public final byte MAX_AGE=30; public static void main(Str

C语言中变量的内存排布

之前对C语言的变量在内存中的排布有些混淆,故进行了以下几个方面的简要整理(所有的实例均是基于X86 PC Ubuntu上GCC编译的). 变量定义时,不同的变量分配的内存地址的增长方向(1) 定义两个全局变量,在赋值编译后打印其在内存中分配的地址,发现先定义的变量被分配在内存中的低地址中(2) X86 PC Ubuntu的main函数中定义变量,使用gcc编译时查看系统对变量分配的内存地址(内存分配的增长方向是低地址到高地址) 结构体实例化之后,结构体中成员分配的内存地址的增长方向(1) 定义全

c++中函数中变量内存分配以及返回指针、引用类型的思考

众所周知,我们在编程的时候经常会在函数中声明局部变量(包括普通类型的变量.指针.引用等等). 同时,为了满足程序功能的需要,函数的返回值也经常是指针类型或是引用类型,而这返回的指针或是引用也经常指向函数中我们自己声明的局部变量. 这样,程序在某些情况下就可能存在一定的问题.看似很简单的问题,通过仔细的分析,我们就能够更好的理解c++中内存分配和释放的问题. 好,废话不多说,我们进入正题.首先,简单介绍一下程序的内存区域的分配: 程序的内存分配 ①堆区(heap).这一部分主要是由程序开发人员自己