gpt4 book ai didi

c++ - 内存分配与 Linux 中的 RSS

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:53 26 4
gpt4 key购买 nike

我正在尝试在 Linux 中以编程方式监视 RSS(驻留集大小)(通过解析 /proc/self/stat),但似乎 RSS 并没有随着我分配内存而增加。

例如,考虑以下分配 10 个 4KB 缓冲区并在每次分配后打印 RSS 的程序。

 int main(int argc, char** argv) {
const long pageSizeKb = sysconf(_SC_PAGE_SIZE) / 1024;
cout << "pageSizeKB is " << pageSizeKb << "\n";
std::vector<std::vector<char>> buffers;
for (int i = 0; i < 10; i++) {
buffers.emplace_back(4*1024);
std::string line;
getline(ifstream("/proc/self/stat", ios_base::in), line);
std::vector<string> stats;
boost::split(stats, line, boost::is_any_of(" "));
cout << "allocated " << (i+1)*4 << "KB" << "\tRSS is " << stats[23] << "\n";
}
}

它的输出是:

pageSizeKB is 4
allocated 4KB RSS is 53507
allocated 8KB RSS is 53507
allocated 12KB RSS is 53507
allocated 16KB RSS is 53507
allocated 20KB RSS is 53507
allocated 24KB RSS is 53507
allocated 28KB RSS is 53507
allocated 32KB RSS is 53507
allocated 36KB RSS is 53507
allocated 40KB RSS is 53507

RSS 不是应该在每次分配后加一吗(页面是 4KB)?

谢谢

最佳答案

不,预计 RSS 不会在每次分配后都增长。

不断向操作系统请求少量内存是低效的,因此一个好的分配器会请求更大的 block ,然后在不让操作系统参与的情况下将其分配出去。

此外,内存是延迟分页的。一个大的、未触及的分配不会对 RSS 有贡献。 (在这种特殊情况下,vector 将确保内存已初始化,因此这不是这里的问题,但如果您使用 .reserve(4096) 分配它可能是问题)。

这意味着您会看到连续多次分配+初始化的内存保持不变,然后突然上升。如果您继续分配更多数据,您可能会看到这种效果。

关于c++ - 内存分配与 Linux 中的 RSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58699165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com