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 46: .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 413: .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 437: .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,443: .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: .下面就分析堆栈代码
上面只考虑入栈,至于出栈大家可以自己推出

浙公网安备 33010602011771号