Tesla.Angela 发表于 2014-4-26 09:54:03

[经验分享]一个在函数体内定义超长变量的经验

假设有一个这样的结构体:
struct _SSS
{
    UCHAR xx;
};
如果直接在(驱动的)函数体里这么定义(定义结构体变量):
SSS var;
var.xx=1;
在编译为32位程序时会提示_chkstk错误。主要原因是局部变量太大。
遇到这种情况,需要动态申请空间(定义结构体指针变量):
SSS *pvar=MALLOC(sizeof(SSS));
pvar->xx=0;

Tesla.Angela 发表于 2014-4-27 10:48:00

补充一句,编译为64位程序,使用“定义结构体变量”的方式,也不会有警告。

x64asm 发表于 2014-5-17 15:05:04

使用编译器参数可以控制堆栈监测机制


#pragma warning(disable:4172)

void*        Entry(void)
{
        unsigned char temp = {0};
        for (unsigned int i =0; i<0x1000000; i++)
        {
                temp=i;
        }
        return (&temp);
}




编译后,并没有产生堆栈检测调用。

upring 发表于 2015-5-5 09:24:38

每日六贴健康生活

oksbsb 发表于 2015-5-5 09:53:25

还要注意一点:内核中栈的默认大小只有4K的
页: [1]
查看完整版本: [经验分享]一个在函数体内定义超长变量的经验