通过这两天的不断试验,研究反汇编代码,感觉GCC对编译的优化还是非常强的
1:局部变量及语句优化:
函数内的,空局部变量,空语句都会被优化掉,不占用任何栈空间和代码空间
2:局部变量一定占用栈空间吗?
众所周知,局部变量实际上是栈里存储的,如果局部变量都是基本数据类型,且都不大,会用寄存器代替,直接运算,不开栈空间。
如果需要引有此变量的地址,因为寄存器的地址是不可引用的,所以必须开个栈空间存储变量
3:栈对齐:
局部变量占用栈的空间是对齐的,目前64位的内核是16字节对齐,即如果局部变量int i,j,k的话,4*3=12字节
但栈会开16个字节,sub sp, sp, #0x10,
如果int i,j,k,l,m 4*5=20字节,但实际上占用32字节,栈会开32个字节sub sp, sp, #0x20
&i=ffffffc099b8ec4c,&j=ffffffc099b8ec50,&k=ffffffc099b8ec54,&l=ffffffc099b8ec58,&m=ffffffc099b8ec5c
实际上i,j,k,l,m间隔还是一个int长度,剩下的12个字节无用
4:修改优化等级:
kernel-3.10/Make