2010-12-12 95 views
3

现在在我的系统(debianx64)上,页面大小为4096字节。有没有可能减少它?我想在内存中存储很多小块,但即使保留1个字节,我也不能使用另一个4095,因为此处添加了第1条消息中的内容。 这是真的还是我错了? 可以做到吗? Thx为答复。C++从4096字节减少内存页面大小

+1

重复http://stackoverflow.com/questions/4420891/c-new-how-how-is-it-allocating-memory。 – Nate 2010-12-12 18:12:41

回答

10

编号

4096是x86平台提供的最小页面大小。这是CPU所施加的限制。它提供更大的尺寸(高达4MB,取决于模式),但这通常在启动时由操作系统选择。

可以做的是做一个相对较大的分配作为object pool的后备存储。那么如果你需要很多小对象,它们都可以存储在一个页面或内存区域中。这是改善内存分配性能的常见习惯用法。此外,大多数理智的内存分配器无论如何都以这种方式工作,所以没有必要实现一个对象池,除非您在分析中发现您需要它。

1

页面大小是OS范围的项目。您不能仅为您的应用程序创建新页面大小,因为页面错误逻辑必须与所有其他进程一起使用。

我不确定你正在尝试做什么。我会说,如果你甚至担心这个问题,那么你需要通过连续存储和访问内存来使你的软件更加缓存友好,就像在一个数组中一样。

1

页面大小(在x86平台上BTW不能低于4K)很可能与您的情况无关。如果您在堆上分配数据,则页面大小问题不会以您所假设的方式出现。