zoukankan      html  css  js  c++  java
  • 从一简单程序看C语言内存分配

    int main13()
    {
      char buf[20]="aaaa";
      char buf2[] = "bbbb";

      char *p1 = "111111";

      char *p2 = malloc(100);
      strcpy(p2, "3333");
    }

    "aaaa"首先分配在常量区,buf[20]分配在栈上,20个字节

    char buf[20]="aaaa";的过程就是将常量区上的"aaaa"内存拷贝至buf[20]分配的栈上

    "bbbb"也分配在常量区,char buf2[] = "bbbb";的过程是计算出"bbbb"的内存,一共5个字节,然后再在栈上开辟5个字节,将"bbbb"的内存值拷贝至栈上开辟的内存

    "111111"也分配在常量区,char *p1 = "111111";是将p1直接指向"111111"常量区的首地址

     "3333"分配在常量区,char *p2 = malloc(100);先在堆上开辟100个字节,p2指向这个堆上100字节的首地址,strcpy(p2, "3333");是将"3333"常量区的内存块拷贝至堆上相应的内存

    注:buf[20], buf2[], p1, p2变量本身均在栈上.

  • 相关阅读:
    Postfix邮件
    RAID和LVM磁盘阵列
    CF1400G
    CF1400F
    2020 AC Saber夏季赛 游记
    APIO2018 题解
    2020北京中考游记
    初中数学几何推理大梳理
    CF1373F Network Coverage
    部编人教版初中历史书事件影响/意义汇总
  • 原文地址:https://www.cnblogs.com/c-slmax/p/5144952.html
Copyright © 2011-2022 走看看