[英]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.