例如下面这小段代码
int gItem1=0,gItem2=0;
int gItem3,gItem4;
int main(int argc,*argv[])
{
static int sItem1 = 0,sItem2 = 0;
static int sItem3,sItem4;
int a,b,c;
char *pstr1 = "this";
return 0;
}
这小段代码在数据段存储了全局变量和静态变量(包括初始化和未初始化的),在堆栈段存储了局部变量,当然在代码段存储了代码。请问怎么知道都在这3个段中各自占据了多大的内存空间呢?当然在这个例子中可以直接算出来占用的内存大小。这只是个例子,实际中需要统计的代码会很长,很有可能还会有函数相互调用的情况,如果有函数相互调用,堆栈段统计就只在函数内部统计。
如果想要获得某个时刻或执行到某行代码时这3段的使用情况,或其可以使用的起始地址,又怎么实现呢?谢谢~~~
本来想给高点分数,发现我的分数不多,呵呵~高手们望给个方法阿
int gItem1=0,gItem2=0;
int gItem3,gItem4;
int main(int argc,*argv[])
{
static int sItem1 = 0,sItem2 = 0;
static int sItem3,sItem4;
int a,b,c;
char *pstr1 = "this";
return 0;
}
这小段代码在数据段存储了全局变量和静态变量(包括初始化和未初始化的),在堆栈段存储了局部变量,当然在代码段存储了代码。请问怎么知道都在这3个段中各自占据了多大的内存空间呢?当然在这个例子中可以直接算出来占用的内存大小。这只是个例子,实际中需要统计的代码会很长,很有可能还会有函数相互调用的情况,如果有函数相互调用,堆栈段统计就只在函数内部统计。
如果想要获得某个时刻或执行到某行代码时这3段的使用情况,或其可以使用的起始地址,又怎么实现呢?谢谢~~~
本来想给高点分数,发现我的分数不多,呵呵~高手们望给个方法阿
在.bss
.text
.data是数据区
那如何从.bss和.data里面得到呢?这两个段都是统计数据的,而且没有局部变量的统计。代码段如何知道?
恐怕用通过汇编才能实现
没听说过有对应的API
不知用汇编如何实现?
调用GetModuleHandleW(0)得到的是当前exe的内存映像的基地址,解读其中的数据结构即可
“用pragma dataseg把你的全局变量都放在一个专用的节中”这种方法只能是编写代码之前用,现在是文件都已经写好了,里面的全局变量、代码空间都是未知的,所以才要统计~~
我觉得编译器编译的时候,肯定有编译到哪一步然后将这一步的变量、代码量保存下来,就是不知道如何找到保存的地方或地址
你有几个cpp就有几个obj