关于main函数形参内存布局

突发奇想,想测试一下main函数参数的内存分布,代码如下:

#include <Windows.h>


int _tmain(int argc, _TCHAR* argv[])
{
	int pNumArgs=0;
	LPTSTR lpCmdLine=NULL;
	LPWSTR* szArglist=NULL;
	lpCmdLine=GetCommandLineW();
	szArglist=CommandLineToArgvW(lpCmdLine, &pNumArgs);
	return 0;
}

在属性中设置命令行参数为aaaaaaa bbbbbbb ccccccc,如下图


调试,szArglist值是0x00439888,内存串口中找到内存0x00439888处(这个地址不大,是在用户空间,非内核空间),如下图:


看内存很清晰:分2部分

第一部分:char*数组, 相当于argv[0]  argv[1]  argv[2]  argv[3],并以空结束。

第二部分:对应的4个字符串,起始地址分别对应第一部分的几个值,以空结束。


从这个内存显示来看,第一部分、第二部分在内存中是连续存放的(可能是碰巧,也可能是微软故意这样安排的,Linux就不是这样)。

至于argv的值,也会有专门的位置存储,也是在栈中。如下图(图中显示不是同一次调试的结果):





猜你喜欢

转载自blog.csdn.net/singleyellow/article/details/78895108
今日推荐