[经验分享]一个在函数体内定义超长变量的经验
假设有一个这样的结构体:struct _SSS
{
UCHAR xx;
};
如果直接在(驱动的)函数体里这么定义(定义结构体变量):
SSS var;
var.xx=1;
在编译为32位程序时会提示_chkstk错误。主要原因是局部变量太大。
遇到这种情况,需要动态申请空间(定义结构体指针变量):
SSS *pvar=MALLOC(sizeof(SSS));
pvar->xx=0; 补充一句,编译为64位程序,使用“定义结构体变量”的方式,也不会有警告。 使用编译器参数可以控制堆栈监测机制
#pragma warning(disable:4172)
void* Entry(void)
{
unsigned char temp = {0};
for (unsigned int i =0; i<0x1000000; i++)
{
temp=i;
}
return (&temp);
}
编译后,并没有产生堆栈检测调用。
每日六贴健康生活
还要注意一点:内核中栈的默认大小只有4K的
页:
[1]