如何使静态数组在第一次使用之前不占用内存

How to keep a static array out of memory until first used

本文关键字:内存 静态 何使 数组 第一次      更新时间:2023-10-16

我是c++的新手,所以我对静态数组的工作方式有点困惑。我知道在c#中,数组在第一次访问之前不会被放入内存中,如果你想要立即访问它,这可能会有问题。然而,我正在努力将一个柏林类转换为c++,我希望有多个静态数组,其中只有一个可以在运行时使用或任意数量的数组。实际上,这并不是一个很大的内存问题,因为它们都不会超过50kb,但是,我宁愿知道是否有可能确保数组不加载到内存中,除非我要求它。是否有一种方法来确保在源代码中定义的静态数组不加载到内存中,除非要求?这是一个相当挑剔的事情(特别是在x64中),但我更喜欢尽可能优化它。我讨厌用一些不会用到的东西占用内存。

或者也许静态数组甚至不是要走的路-只是动态类对象包装数组?

我想真正的问题是:在c++中实现表查找的最有效的解决方案是什么?

静态数组将在您的内存空间中,没有办法省略或释放它们,但这与'在内存中'不同。把它留给Windows虚拟内存管理器。当您第一次访问数组时,Windows将把它从磁盘放入RAM。

不,你不能这样做:c++中静态初始化的结构和数组与其他代码一起加载到内存中,所以你不能影响它加载的时间。

如果您必须在运行时加载静态数组,请考虑更改策略,将数据放入单独的文件中,并添加初始化函数以将文件读取到静态vector对象中。这种策略的结果是将数据放入动态内存区域,而vector对象本身可以保留static

Windows和Linux都使用"按需加载",这意味着当代码到达它实际需要数据时,代码和数据被加载。因此,假设数据是常量和全局的(例如static const int x[number] = { ... }),则不会加载数据。[典型的粒度为4KB或其倍数,但如果您有几百个50KB的数据块没有被使用,则不应该在内存中看到它们,因此加载程序本身不会延迟]。

当涉及到性能和优化时,最好不要通过试图预测某个领域的问题(即"过早优化")来使事情过于复杂,并确保在优化它之前您认为可能是问题的内容实际上是问题。