我对这些概念很陌生,但我想问你一个我认为非常基本的问题,但我很困惑,所以我问它.问题是......过程的大小如何由操作系统决定?首先让我清楚一下,假设我已经编写了一个C程序,我想知道它将占用多少内存,我该如何确定它?其次我知道有许多部分,如代码部分,数据部分,流程的BSS.现在它们的大小是预先确定的吗?其次,如何确定堆栈和堆的大小.堆栈和堆的大小是否也很重要,同时计算进程的总大小.
我们再次说,当我们加载程序时,给进程一个地址空间(由base和limit寄存器完成并由MMU控制,我猜)当进程试图访问不在其中的内存位置时地址空间我们得到分段错误.进程如何访问不在其地址空间中的内存.根据我的理解,当发生一些缓冲区溢出时,地址就会被破坏.现在当进程想要访问损坏的位置时,我们就会得到分段错误.是否有任何其他地址违规方式.
第三,为什么堆栈向下增长并向上堆积.这个过程与所有操作系统相同.它如何影响性能.为什么我们不能以其他方式拥有它?
如果我在任何陈述中出错,请纠正我.
谢谢Sohrab
如果有人在代码中使用特定功能(例如memcpy),我怎么能确定它会返回错误.
我们已经从代码中删除了memcpy的所有实例,其中包含一些内部设计的函数,
我想确定的是,每当有人在将来使用memcpy时,编译器会抛出错误信息.