簡體   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