Linux下调试编写并调试C语言程序,怎么查看它的内存和CPU信息?GDB中可以实现吗?
2个回答
展开全部
内存和cpu是硬件的概念,在程序中只有被映射后的内存和线程/进程的概念,具体如何调度程序的内存地址和线程/进程的挂起和运行都是操作系统来做的。使用gdb能够查看当前程序各个变量的内存数据内容此时的内存地址对程序员来说是没什么用的(除非是做硬件开发,可能会需要),gdb还能够查看当前程序中那些线程被挂起或正在运行,但查询不到当前线程在哪个cpu上运行。
追问
对啊对啊,就是想看操作系统怎么弄的,比如fork()以后怎么看它占用的内存信息,和CPU是怎么处理的,什么时候挂起什么时候继续执行,还有它占用的内存起始地址多少占了多少,要怎么看呀,Linux就一脸懵逼
追答
回答被采纳,没法直接回复你的追问了,在这里说吧!无论在linux还是windows,你说的要求都是以看不了的。
首先内存在操作系统层面有一个物理地址到逻辑地址的映射,各类硬件设备、虚拟内存都会占用一部分内存地址空间,操作系统会将这些内存地址空间和实际的物理内存一起进行内存管理。所以你看到的内存地址,不一定是真实的物理内存地址看到只是逻辑地址。
在一个,cpu的调度。cpu的调度策略是取决于操作系统核心的,同样的linux,不同的核心版本可能调度cpu的方式都不一样。常用的程序语句sleep()或者互斥锁等等操作都会导致线程挂起,但当你的程序数量多于操作系统cpu数量时,cpu如何调度这些进程或者线程那就没法看到了。
上述两个问题都可以在操作系统原理相关的书籍中找到。建议你去看一下操作系统相关的数据来了解操作系统对内存与cpu的管理策略。当然,书里面的都是比较旧或者比较基础的原理。真正的常用操作系统可能有着自己独特的优化方式。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询