c语言分析程序,c语言分析程序的运行结果

dfnjsfkhak 38 0

大家好,今天小编关注到一个比较意思的话题,就是关于c语言分析程序问题,于是小编就整理了3个相关介绍c语言分析程序的解答,让我们一起看看吧。

  1. Linux是如何记录进程资源的?你能从C语言源代码层面分析下吗?
  2. C语言猜拳游戏的系统分析?
  3. c语言函数调用实例分析?

Linux是如何记录进程***的?你能从C语言源代码层面分析下吗?

谢邀。

其实简单来说,进程无非就是处于运行期的程序及其相关***的总和。这里读者应该注意“相关***”一词,Linux 在内核中是如何记录进程的***的呢?

c语言分析程序,c语言分析程序的运行结果-第1张图片-芜湖力博教育咨询公司
图片来源网络,侵删)

首先应该明白,Linux 内核大都是***用C语言编写的,因此要弄清楚内核如何记录进程***,只需要查看相关的C语言代码可以了。事实上,Linux 内核是使用 task_struct 结构体描述进程的***的,它的C语言部分代码如下,请看:

task_struct 结构体很长,在我手中的 Linux 内核C语言源代码中,它占用了280行。当然了,这其中包含很多条件编译部分,在 32 位机器上,task_struct 大约要占用 1.7 KB 的内存空间,不过考虑到它可以管理完整的进程,1.7kB 其实并不算大了。

鉴于 task_struct 结构体过长,这里不可能将其成员一一介绍清楚。如果读者和我一样好奇,粗略的浏览 task_struct 结构体,应该能够发现一些比较令人熟悉的成员,例如:

c语言分析程序,c语言分析程序的运行结果-第2张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

通过C语言注释以及成员的变量名,能够看到 task_struct 结构体包含了文件系统线程结构体,以及进程打开的文件等信息,这就与上一节文章的内容对应上了。其他成员在我之后的文章中会涉及到,这里暂不赘述。

创建进程时,Linux 通过 slab 分配器分配 task_struct 结构,这样可以避免动态分配和释放带来的开销,提高内存的使用效率。

根据我手上的内核C语言源代码,Linux 中还有一个结构体 thread_info,它的其中一个成员 task 指针正好适合用于索引 task_struct 结构体,在X86_64平台上,thread_info 的相关C语言代码如下,请看:Linux 通常会在内核栈底或者栈顶保留 thread_info 结构,而内核栈通常大小都是可知的,因此每个进程都能方便的从自己的栈中找到 thread_info 结构,进而找到 task_struct 结构。

(图片来源网络,侵删)

查找当前进程的 thread_info 结构,可以调用 current_thread_info() 函数,它的C语言代码如下,请看:

可见,current_thread_info() 函数其实就是通过进程栈计算的,因此它的实现与平台架构有关,上述C语言代码其实只是 arm 平台的实现方法,其他平台的实现方法,读者可自行查阅。

C语言猜拳游戏的系统分析?

猜拳是由玩家电脑之间进行的。

电脑的出拳可以通过随机函数数。1表示石头,2表示剪刀,3表示布。如果玩家出石头、剪刀、布中的一种,电脑出石头、剪刀、布中的一种,那么就有9中组合规则。第一种情况。当玩家出拳是石头时 如果电脑出石头,结果为平;如果电脑出剪刀,结果为赢;如果电脑出布,结果为输。第二中情况。当玩家出拳是剪刀时 如果电脑出石头,结果为输;如果电脑出剪刀,结果为平;如果电脑出布,结果为赢。第三种情况。当玩家出拳是布时 如果电脑出石头,结果为输;如果电脑出剪刀,结果为输;如果电脑出布,结果为平;

c语言函数调用实例分析?

以下是一个关于C语言函数调用实例的分析:
***设有一个程序,其中定义两个函数:func1()和func2()。其中,func1()调用了func2()。
```
#include <stdio.h>
void func2() {
printf(&#34;This is func2\n");
}
void func1() {
printf("This is func1\n");
func2();
}
int main() {
printf("This is main\n");
func1();
return 0;
}
```
在main()函数中,程序首先打印"This is main",然后调用func1()函数。在func1()函数中,程序打印"This is func1",然后调用func2()函数。在func2()函数中,程序打印"This is func2"。
因此,程序的输出将是:
```
This is main
This is func1
This is func2
```
这个例子展示了如何在C语言中调用函数。在调用一个函数时,程序将执行被调用函数中的代码,然后回到调用函数继续执行后面的代码。在这个例子中,func1()函数调用了func2()函数,所以程序会先执行func2()中的代码,然后回到func1()中继续执行后面的代码。

到此,以上就是小编对于c语言分析程序的问题就介绍到这了,希望介绍关于c语言分析程序的3点解答对大家有用

标签: 语言 函数 调用