[英]Trigger the invocations of system call in Linux, C program?
下面的C程序在Linux中运行时,哪一行的执行必须触发系统调用的调用,为什么? 什么是系统调用调用?
void main()
{
double x=1;
double y;
double *z;
z=(double *)malloc(sizeof(double)); // line 1
scanf("%f", &y); // line 2
*z=sqrt(y); // line 3
y=y*2.0; // line 4
printf("y=%f, *z=%f\n", y, *z); // line 5
y=y/x; // line 6
printf("y=%f",y); // line 7
}
对malloc
调用会调用系统调用,因为操作系统管理内存。
对scanf
和printf
调用会调用系统调用,因为操作系统管理I / O操作。
系统调用是对操作系统服务的调用。
上面对人们的困惑是 syscall 与 libc。 并非每个 malloc 都需要系统调用——事实上,大多数不应该。
堆:LibC 需要管理分配给堆的内存。 这是您所有个人 malloc() 分配的来源区域。 当堆耗尽时,libc 将调用内核空间的系统调用以请求更多内存/重新分配/释放页面等。
Malloc:LibC 提供用户级代码来分配堆内的内存块。 它处理分配和释放此内存的所有单独方式。 如果分配不能在现有堆容量内完成,它将触发堆系统调用。
如果您查看 libc malloc 代码,您将看到它在 __libc_malloc() 和 _int_malloc() 之间是如何工作的。 在 _int_malloc() 中,它将回退到 sysmalloc(),然后执行内核内存堆更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.