zoukankan      html  css  js  c++  java
  • 变量的内存分配

    内存分配方式有三种:


    (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。


    (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指 令集中,效率很高,但是分配的内存容量有限。


    (3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动 态内存的生存期由我们决定,使用非常灵活,但问题也最多。

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    
    //存在静态存储区。
    int global1 = 1;
    int global2 = 2;
    int global3 = 3;
    
    int main()
    {
    	//存在栈上。
    	int local1 = 4;
    	int local2 = 5;
    	int local3 = 6;
    
    	//存在静态存储区。
    	static int static1 = 7;
    	static int static2 = 8;
    	static int static3 = 9;
    
    	//存在堆上。
    	char *buf1 = new char[4];
    	char *buf2 = new char[4];
    	char *buf3 = new char[4];
    
    	cout << "&global1:" << &global1 << endl;
    	cout << "&global2:" << &global2 << endl;
    	cout << "&global3:" << &global3 << endl;
    
    	cout << endl;
    
    	cout << "&local1:" << &local1 << endl;
    	cout << "&local2:" << &local2 << endl;
    	cout << "&local3:" << &local3 << endl;
    
    	cout << endl;
    
    	cout << "&static1:" << &static1 << endl;
    	cout << "&static2:" << &static2 << endl;
    	cout << "&static3:" << &static3 << endl;
    
    	cout << endl;
    
    	printf("buf1:0x%08x\n", buf1);
    	printf("buf2:0x%08x\n", buf2);
    	printf("buf3:0x%08x\n", buf3);
    	return 0;
    }
    

    输出:

    &global1:0x402000
    &global2:0x402004
    &global3:0x402008
    
    &local1:0x22ff40
    &local2:0x22ff3c
    &local3:0x22ff38
    
    &static1:0x40200c
    &static2:0x402010
    &static3:0x402014
    
    buf1:0x003e3fe8
    buf2:0x003e2470
    buf3:0x003e2480
    

    注意全局变量和静态变量分布在连续的内存空间!

  • 相关阅读:
    回顾[2007-09-03 12:58:03]
    关于知音[2007-08-17 20:56:06]
    今天晚上吃散伙饭[2007-06-18 00:24:36]
    上次所料不错[2007-06-13 15:44:47]
    今天真没劲[2007-06-10 17:50:25]
    关于昨晚的梦[2007-05-07 12:12:06]
    iOS 自定义键盘
    iOSQuart2D绘图之UIImage简单使用
    iOS 两种不同的图片无限轮播
    iOS 简单引导界面
  • 原文地址:https://www.cnblogs.com/helloweworld/p/3060860.html
Copyright © 2011-2022 走看看