我正在将Windows 7库移植到嵌入式平台。为了做到这一点,我的雇主向我询问了我的系统在移植后需要的内存数量(和CPU,但让我们集中精力记忆内存) - 这样他就可以根据我的需要调整板卡的尺寸。Windows到嵌入式端口:数据和代码内存大小
我在互联网上看看,那里似乎不存在这个问题多的信息,因此,我的问题:为了得到闪存代码的内存占用的一个粗略的想法
内存(代码只有没有数据的内存),我在互联网上阅读,我应该总结我使用的所有DLL的大小。看起来,所有编译器和平台都为代码占用空间提供了不同的大小,但总体上代码的大小(没有数据)通常非常接近。你确认吗?
为了处理数据所需的内存(堆+堆栈,但没有代码),我看了一下任务管理器(和进程管理器)。看来我使用的数据总量是在“峰值工作集”中指定的。我对此有几点疑问:
2.a. “工作集”包含堆+堆栈内存还是仅对应于堆?
2.b. “工作集”是否也包含代码的大小? (因为我在Windows 7上,代码也存储在RAM中,而不是嵌入式系统中的闪存中),还是只对应于数据?
2.c.看起来'峰值工作集'反映了从程序启动时实际存储在RAM中的最大物理内存量,但它并不反映程序之后可能需要的大小(如果我碰巧在运行时分配内存 - 这将是不好的;) - 峰值将继续增加)。你确认吗?
2.d.因此,您是否也确认,如果我在运行时不分配内存,“峰值工作集”应该大致是我的嵌入式系统需要的RAM的最大大小?最高位大小差异的原因是系统技术的区别...
感谢,
安托万。
最好的东西是一个跟踪malloc()和什么的调试器,而且你会模糊系统来充分运用它。您在任务管理器中看到的内容并不特别准确。 – 2012-07-13 16:55:59
操作系统通过利用虚拟内存并尽可能多地为进程提供合理的物理内存来优化内存使用。工作集编号告诉你为进程运行多少物理内存。这可能比流程需求少得多,少于代码+数据+堆+堆栈大小。移植到不同的操作系统和硬件时,不能依赖工作集编号。这样做毫无意义。 – 2012-07-13 22:41:37