最近利用闲暇时间,回顾了一下在程序运行时的内存的分配情况。在网上查了些资料,对于通常的32位程序来说,系统会针对程序不同的段(如代码段、常量数据段、未初始化的数据段等)分别分配一定空间,分配方式大致如下图:
程序运行时内存空间的分配(图片摘自网络)
注意,在栈区一般会存储函数的参数值、局部变量等内容。在函数调用时,堆栈内数据的排列如下图所示:
函数调用时堆栈内数据存放位置(图片摘自网络)
为了验证函数调用时堆栈内数据存储的实际情况,调试了如下代码:
#include <stdio.h>
#include <string.h>
int localFun(char,char,char,char,char);//如果函数所有参数为int型,则从运行结果可以看出参数入栈顺序为从右至左,地址间隔为4
int main(int argc,char* argv[])
{
char c1,c2;
localFun(c1,c2,'A','$','-');
printf("Main End!\r\n");
return 0;
}
int localFun(char var1, char var2, char varA, char varB, char varC)
{
char var3='s';
char strVar[3];
printf("var1=%c;var2=%c,var3=%c,strVar=%s\r\n",var1,var2,var3,strVar);
printf("pvar1=%p;pvar2=%p,pvar3&#