怎么预测程序运行时的内存

怎么预测程序运行时的内存,第1张

预测程序运段弊燃行时的内存:如果看程序所占系统的空间,这个并不完全取决于程序,也取决于 *** 作系统,可以在任务管理器中去看。

wmic process where name="cmd.exe" get WorkingSetSize这里 "cmd.exe" 你可替换成卜弯你的程序名字。

你也可以用你的程序 进程 PID 号数 调用, 命令是:wmic process where processid=6884get WorkingSetSize这里6884你可替换成你的程序进程 PID。

系统文件夹:

命令:%AllUsersProfile% (点击确定或回车打开相应的文件夹)。握虚

说明:所有用户的配置文件总目录。

对应路径:C:\Documents and Settings\All Users。

查看实际d出的文件夹路径就会发现,这个路径不同于普通的系统路径,这是一个双系统共享C盘的多系统中的Windows XP *** 作系统的路径。所以从运行中输入相对位置打开系统文件夹的好处就在此,直达目标文件夹。

命令:%HOMEPATH%(点击确定或回车打开相应的文件夹)。

命令:%USERPROFILE%。

说明:指当前用户的配置文件目录。

基本没有办法计算

生成目标文件的过程如下

1. 预处理(Preprocessing)这一步需分析各种命令,如#define,#include,#if等。

2. 编译(Compilation) 这一阶段根据输入文件产生汇编语言,由于通常是立即调用汇编程序,所以其输出一般并不保存在文件中。

3. 汇编(assembly) 这一阶段将汇编语言用作输入,产生具有.o扩展名的目录文件。

4. 链接(linking)这是最册返后一个阶段,在这一阶段中,各个.o模块被放置在该可执行文件中的相应位置上。该文件引用的函数也放在该文件中。

所以决定最终大小的因素很多 语句的多少和程带迹序的大小没有直接关系 c的每一条语句基本都对应着长度不等的汇编语言段 而且作为高级语言 在编译成机器语言的过程中蠢姿并不是一句一句一一对应的 即便是汇编语言 也不完全是一一对应的

具体内容 请查阅编译原理相关书籍

查看你的系统cache大小:$ cat /sys/devices/system/cpu/cpu0/cache/index2/size以上命令是查看Level 2cache的大小,在服务器上是256k,记住这个数,写程序时要用。看cache line的大小:$ cat /sys/devices/system/cpu/cpu0/cache/index2/coherency_line_size编写测试程序cache.c:以上代码虽然简单,但要理解需要懂cache的简单结构及原理:cache是以64字或者128字节为一行的,分为多组(或者叫多路),每次发生cache miss取数据时,cache按照cache line为单位(这里也就是一次取64字节)从内指局存取数据。第一步得知level 2 data cache总大小是256k,第二步得到每个cache line是64字节,所以,level2 data cache共256k/64=2^12=4096行。想象一个表,每行64字节,一共4096行,共256k大小,这就是我们cache的简单结构。为了保证每次取数据都会发生miss,我们必须以>=64字节的步长取数据。首先创建一个512K大的数组,要比cache大一倍。如果数组也是256k,当启橡第一次循环结束,数组用完后再次从头开始取数据时,cache就不再被替换,所以不会再发生cachemiss,为了保证每次取数据都要发生cache miss,数组必须至少是cache大小的两倍及以上。循环读取数组中的数据,每次读一个int大小,然后加64,再读取下一个cache line的数据,循环直到数组数据全部取出。oprofile统计cache miss有个最低限制(我的0.9.8版本是2000000次),所以发生的miss数太小的话是娶不到的,所以加大循环次数至5000000。至此可以进行100% cachemiss的测试了,但是经过测试发现 cache miss压根没发生,百思不得其解,请教boss后才想起来,x86有个streambuffer硬件悄逗旁预取器,如果你取数据非常规律,那么硬件预取器经过训练后,会在你真正取数据之前,将你要的数据直接放到cache中。所以,要在至强处理器的服务器上做cachemiss测试,必须重启系统后,关闭硬件预取器。否则就要修改程序,写出真正随机取数据的代码,但是这无法保证cachemiss 率是100%,只能保证cache 命中率比较低而已。SPEC CPU2006中的mcf发生cache miss rate很高,可以用其做测试。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12407299.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存