最近,我在一次采访中被问到一个问题,进程和线程之间有什么区别。真的,我不知道答案。我想了想,给出了一个很奇怪的答案。
线程共享相同的内存,进程不共享。回答完这个问题,面试官给了我一个邪恶的笑容,向我抛出了以下问题:
问 :你知道程序被划分的部分吗?
我的回答: 是的(认为这很简单)堆栈、数据、代码、堆
问 :那么,告诉我:线程共享哪些段?
我无法回答这个问题,最后说了所有这些。
请问,任何人都可以为进程和线程之间的区别提供正确且令人印象深刻的答案吗?
您非常正确,但是线程共享 除 堆栈之外的所有段。线程具有独立的调用堆栈,但是其他线程堆栈中的内存仍然可以访问,理论上您可以在其他线程的本地堆栈帧中保存指向内存的指针(尽管您可能应该找到一个更好的地方来放置该内存!)。