释放静态内存? 不,那不可能是正确的

我一直在玩嵌入资源到我的C ++程序。 为了做到这一点,我hexdump数据到一个简单的数组,即

unsigned char image_png[] ={
    0x0a, 0x0b, 0x0c, 0x0d, ...
};

其中一些资源在加载后不会被使用(即它们被转换为其他东西,然后原始数据只是散装......尽管为了便于分配而少量散装可能是值得的)。

我很好奇是否有办法将资源嵌入到程序中,这样我就不必担心二进制能够找到所有最重要的资源,但是在完成使用之后将其释放,以便运行时内存占用量减少了。

这可能吗? 如果可能的话,尝试去做是一件很愚蠢的事情吗? 例如,也许操作系统会将整个程序映像保存在内存中(我不确定它是如何工作的)。

编辑:要回答评论,我正在研究Linux(Ubuntu 10.04),但如果有跨平台的解决方案,我很乐意听到他们


正如Tomaka17所说的,你不必担心它 - 如果你永远不会触及那个资源,它永远不会被错误的,并且不会消耗物理内存。 当你加载一个DLL / so /任何东西时,它实际上只将该文件映射到内存中; 试图访问该文件是导致实际阅读文件的原因。


我看到在多个应用程序中使用的一种方法是在可执行文件的末尾连接数据,然后附加数据本身的大小。

然后,您可以打开可执行文件,转到流尾并读取数据大小,然后返回该大小并读取资源。

请注意,这些资源将与您放置资源完全相同,因此组织可能会面临风险。

我也不知道这是否是一种最佳做法,但似乎有效。

链接地址: http://www.djcxy.com/p/47575.html

上一篇: Freeing static memory? no, that can't be right

下一篇: Testing EF 4.0 with POCO and t4 templates