Gcc - c 内存分析

Gcc - c 内存分析

Stack :函数地址,参数,局部非静态变量等

全局区:bss区、data区

Bss未初始化 :

Data初始化 :

堆区:动态库函数申请的,

   1:  .file    "memory.c"
   2:      .comm    dy_a,4,4 (Bss)
   3:  .globl dy_b
   4:      .data
   5:      .align 4
   6:      .type    dy_b, @object(Data)
   7:      .size    dy_b, 4
   8:  dy_b:
   9:      .long    90
  10:      .local    st_a
  11:      .comm    st_a,4,4
  12:      .align 4
  13:      .type    st_b, @object
  14:      .size    st_b, 4
  15:  st_b:
  16:      .long    8
  17:      .comm    p,4,4
  18:      .text
  19:  .globl function
  20:      .type    function, @function
  21:  function:
  22:      pushl    %ebp
  23:      movl    %esp, %ebp
  24:      subl    $40, %esp
  25:      movl    $190, -16(%ebp)
  26:      movl    $4, (%esp)
  27:      call    malloc
  28:      movl    %eax, p
  29:      movl    $4, (%esp)
  30:      call    malloc
  31:      movl    %eax, -12(%ebp)
  32:      leave
  33:      ret
  34:      .size    function, .-function
  35:      .data
  36:      .align 4
  37:      .type    func_st_b.1799, @object
  38:      .size    func_st_b.1799, 4
  39:  func_st_b.1799:
  40:      .long    900
  41:      .local    func_st_a.1798
  42:      .comm    func_st_a.1798,4,4
  43:      .ident    "GCC: (GNU) 4.4.6 20120305 (Red Hat 4.4.6-4)"
  44:      .section    .note.GNU-stack,"",@progbits
  45:      #include<stdlib.h>
  46:  int dy_a ;
  47:  int dy_b = 90 ;
  48:  static int st_a ;
  49:  static int st_b= 8;
  50:  int * p ;
  51:  void function ( int ar)
  52:  {    
  53:      int func_dy_a ;
  54:      int func_dy_b = 190 ;
  55:      int * o ;
  56:      p = (int *)malloc(sizeof(int)) ;
  57:      o = (int *)malloc(sizeof(int)) ;
  58:      static int func_st_a ;
  59:      static int func_st_b = 900;
  60:  }

函数堆栈分配

C 程序:

   1:  Swap(int a )
   2:   
   3:  {
   4:   
   5:  a= 90 ;
   6:   
   7:  }
   8:   
   9:  Int main()
  10:   
  11:  {
  12:   
  13:  Int b = 888;
  14:   
  15:  Swap(b);
  16:   
  17:  }

对应的汇编代码

 

   1:  file "t3.c"
   2:   
   3:  .text
   4:   
   5:  .globl swap
   6:   
   7:  .type swap, @function
   8:   
   9:  swap:
  10:   
  11:  pushl %ebp
  12:   
  13:  movl %esp, %ebp
  14:   
  15:  movl $90, 8(%ebp)
  16:   
  17:  popl %ebp
  18:   
  19:  ret
  20:   
  21:  .size swap, .-swap
  22:   
  23:  .globl main
  24:   
  25:  .type main, @function
  26:   
  27:  main:
  28:   
  29:  pushl %ebp
  30:   
  31:  movl %esp, %ebp
  32:   
  33:  subl $20, %esp
  34:   
  35:  movl $888, -4(%ebp)
  36:   
  37:  movl -4(%ebp), %eax
  38:   
  39:  movl %eax, (%esp)
  40:   
  41:  call swap
  42:   
  43:  movl $0, %eax
  44:   
  45:  leave
  46:   
  47:  ret
  48:   
  49:  .size main, .-main
  50:   
  51:  .ident "GCC: (GNU) 4.4.6 20120305 (Red Hat 4.4.6-4)"
  52:   
  53:  .section .note.GNU-stack,"",@progbits
  54:   

.下面就分析堆栈代码

wps_clip_image-2654

上面只考虑入栈,至于出栈大家可以自己推出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值