美文网首页
内存分配

内存分配

作者: Rumbles | 来源:发表于2018-03-15 17:39 被阅读0次

    内存分配有三种:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。
    静态存储区

    内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。
    堆区:程序员自己分配和释放
    栈区:在执行函数时,函数(包括main函数)内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放  申明局部变量 
    
    二、例子程序 
    这是一个前辈写的,非常详细 
    //main.cpp 
    int a = 0; 全局初始化区 
    char *p1; 全局未初始化区 
    main() 
    { 
    int b; 栈 
    char s[] = "abc"; 栈 
    char *p2; 栈 
    char *p3 = "123456"; 123456\0在常量区,p3在栈上。 
    static int c =0; 全局(静态)初始化区 
    p1 = (char *)malloc(10); 
    p2 = (char *)malloc(20); 
    分配得来得10和20字节的区域就在堆区。 
    strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。 
    }
    char s1[] = "aaaaaaaaaaaaaaa"; 
    char *s2 = "bbbbbbbbbbbbbbbbb"; 
    aaaaaaaaaaa是在运行时刻赋值的; 
    而bbbbbbbbbbb是在编译时就确定的; 
     1.是数组以后可能会发生变化 所以会存储在 栈区  2.是常量存贮在静态常量区
    

    参考好文:
    http://blog.csdn.net/slj_win/article/details/8608436

    相关文章

      网友评论

          本文标题:内存分配

          本文链接:https://www.haomeiwen.com/subject/ridzfftx.html