HOME 生活记录运维/编程
作者/来源:yixinu.com
栏目:运维/编程
日期:2019-09-26 15:54:44

局部变量保存在栈里

栈和堆的区别是

栈是系统根据变量大小自动分配空间的

堆是你用new,malloc等手动分配空间的


局部变量保存在栈内存区;

栈内存区的地址是连续的,由系统控制速度较快而

堆内存区的地址是不连续的,它是系统将空闲内存块链接起来的链表,

用户用new/malloc请求分配时,找到第一个满足大小要求的块从链表中删除此节点,

然后分给用户,没有栈内存速度快,但是很灵活。


操作系统给程序运行的内存非了4个区域:

1 代码区:顾名思义就是存放运行的代码的

2 全局数据区: 存放全局数据和静态数据以及常量.

3 栈区 函数调用时的返回地址,参数压栈,局部变量,返回数据等都存放在栈区.

4 堆区,存放程序动态分配的内存(new,malloc等函数分配的)

栈内存是由系统自己分配和释放的,而堆内存要由程序员自己全全控制的,否则会出现内存泄露.





#include 
#include 
#include 
#include 

using namespace std;
char* GetM()
{
    char p[] = "hello world!";//局部变量,分配在栈上,函数返回,内存释放
    return p;
}

char* getMemory(char *p)
{
    p = (char *)malloc(100);//分配在堆上,函数返回,内存不释放
    p = "hello world!";
    return p;
}
int main()
{
    char *str = NULL;
    str = GetM();
    printf("value:%s\n",str);//null

    str = getMemory(str);
    printf("value:%s\n",str);
    free(str);
    return 0;
}


分享到:

Copyright © 2013-2014 yixinu.com 湘ICP备14004402号

QQ:316686606  Email: 316686606@qq.com