是的,栈基址的却可以通过/STACK开关指定.我说的方法只是用于一些只有一个线程简单项目的判断,如果要对多线程,就得用你这个方法了,其实简单的判断单线程程序,我这个方发也是可行的,因为程序中如果是自己定义的变量只能在三个地方,全局区,栈区,堆,当然手工添加PE节区的情况除外,比如创建dll时加一个共享段,然后把变量定义在这个共享段中,全局区是存放静态数据和全局变量,所以如果我们要测试的不是静态变量或者全局变量,那么它不在堆区就在栈.至于静态存储区是个广义的说法,可以是全局区,栈,文字常量区,代码区.
对了,为了验证new 时c/c++ CLR会创建自己的堆我做了测试,发现一个有趣的事,就是在程序中,一开始,就有4个堆,我把所有标准C++文件全部移出,只留一个Windows.h, 并连接release版c/c++ CLR,结果还是4,我把windows.h移出结果也是四,即使我在我的Cpp中没有new,结果还是4,发现要想验证这个还真是不好办,因为头文件中库函数也可以new,也可以创建堆等等有太多不可控制因素,我能想到的就是看源码了,但我还真没找到源码,不知你有没有什么方法.
回复 更多评论