• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
指尖上的快乐
博客园    首页    新随笔    联系   管理    订阅  订阅

从一简单程序看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变量本身均在栈上.

 

posted @ 2016-01-20 13:53  指尖上的快乐  阅读(220)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3