• 堆区函数


    070.堆函数

    一个进程或者说一个程序.可能有多个线程.
    单线程
    每个线程都有自己专属的栈(stack).
    栈的最大尺寸是固定的,在OD的右下角,我们都看到过,超过那个范围就会引起栈溢出.
    堆上的内存必须手工释放(C/C++),有的编程语言比如Java、Net不需要手动管理堆内存,语言本身有GC(垃圾回收机制)则另谈.以后我们再来讨论这个问题.

    函数内部的局部变量(auto以及参数)一旦,函数运行完毕,则会自动从栈上释放.

    int f_abc(int p_v1,int p_v2){
    // C语言的形参是从右到左入栈的.  p_v2先入栈,p_v1 后入栈.
    }

    malloc ();
    calloc (); 第一个参数指定单位的数量. 指定一个单位的大小./
    realloc()


    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>


    void main() {

     int * lp = (int *)malloc(10 * sizeof(int));
     free(lp); 

     // malloc只负责申请内存,但是不负责初始化内存,单独需要使用memset这个函数.

     lp = (int *)calloc(10, sizeof(int));
     //calloc这个函数,它申请的内存,会自动初始化为0.

     free(lp);
     system("pause");
    }


    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>


    void main() {

     char * lp_1 = (char *)calloc(10, sizeof(char));


     char * lp_temp = (char*)realloc(lp_1, 13);
     //realloc可以修改申请的内存大小,不仅可以变大,还可以变小.
     if (lp_1 == lp_temp) {
      printf("内存地址一样,未发生变化! ");
     }
     else {
      printf("内存地址不一样,发生变化! ");
     }
     //realloc追加的内存是不会进行初始化的.

     free(lp_temp);

     system("pause");

  • 相关阅读:
    时寒冰先生文章转载
    [转]迭代经理是什么角色
    [转]如何抉择重构?
    面面俱到:SQL SERVER 2008主数据管理
    [转]用户故事【任务分解】和软件开发不得不说的故事
    读书心得3:去功利化&推荐两本书 转时寒冰
    沟通模式中的方式与过程
    系统分析与设计笔记 -系统类型
    加入敏捷团队宣言
    [转]敏捷进展学习 新项目Sprint
  • 原文地址:https://www.cnblogs.com/xiaodaxiaonao/p/8053658.html
Copyright © 2020-2023  润新知