最近,我在面试中被问到一个问题,即流程和线程之间的区别.真的,我不知道答案.我想了一会儿,给了一个非常奇怪的答案.
线程共享相同的内存,而进程则没有.在回答这个问题之后,面试官给了我一个邪恶的微笑,并向我解释了以下问题:
问:你知道程序划分的部分吗?
我的回答:是的(认为这是一个简单的)堆栈,数据,代码,堆
问:那么,告诉我:线程共享哪些段?
我无法回答这个问题并最终说出了所有这些.
请问,任何人都可以为流程和线程之间的差异提供正确和令人印象深刻的答案吗?
我已经阅读了有关此参数的文档,但区别非常大!启用后,简单程序(见下文)的内存使用量约为7 GB,禁用时,报告的使用量约为160 KB.
top也显示大约7 GB,这有点证实了结果pages-as-heap=yes.
(我有一个理论,但我不相信它会解释这么大的差异,所以 - 请求一些帮助).
特别困扰我的是,大部分报告的内存使用情况都被使用std::string,而what?从未打印过(意思是 - 实际容量非常小).
我需要pages-as-heap=yes在分析我的应用程序时使用,我只是想知道如何避免"误报"
代码段:
#include <iostream>
#include <thread>
#include <vector>
#include <chrono>
void run()
{
while (true)
{
std::string s;
s += "aaaaa";
s += "aaaaaaaaaaaaaaa";
s += "bbbbbbbbbb";
s += "cccccccccccccccccccccccccccccccccccccccccccccccccc";
if (s.capacity() > 1024) std::cout << "what?" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
int main()
{
std::vector<std::thread> workers;
for( unsigned i = 0; i < …Run Code Online (Sandbox Code Playgroud)