zoukankan      html  css  js  c++  java
  • 堆区函数

    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");

  • 相关阅读:
    ubuntu 安装 redis desktop manager
    ubuntu 升级内核
    Ubuntu 内核升级,导致无法正常启动
    spring mvc 上传文件,但是接收到文件后发现文件变大,且文件打不开(multipartfile)
    angular5 open modal
    POJ 1426 Find the Multiple(二维DP)
    POJ 3093 Margritas
    POJ 3260 The Fewest Coins
    POJ 1837 Balance(二维DP)
    POJ 1337 A Lazy Worker
  • 原文地址:https://www.cnblogs.com/xiaodaxiaonao/p/8053658.html
Copyright © 2011-2022 走看看