繁体   English   中英

在Linux,C程序中触发系统调用的调用?

[英]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调用会调用系统调用,因为操作系统管理内存。

scanfprintf调用会调用系统调用,因为操作系统管理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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM