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
    

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

  • 相关阅读:
    centos golang 环境配置
    运行安全审计 npm audit
    Oracle ——UTL_SMTP包发送Email
    UML学习入门就这一篇文章
    UML ——类图和对象图
    SQL SERVER 行列转换(转自别人)
    Oracle行列转换小结
    同步调用/异步调用(摘自百度)
    C#中Invoke的用法(Winform编程)
    udpclient之异步编程
  • 原文地址:https://www.cnblogs.com/helloweworld/p/3060860.html
Copyright © 2011-2022 走看看