gpt4 book ai didi

c - malloc 中的内存分配与数组中的内存分配有何不同?

转载 作者:行者123 更新时间:2023-11-30 18:17:19 25 4
gpt4 key购买 nike

我写了这样的代码:

int * ptr;
ptr = (int*) malloc(5 * sizeof(int));

请告诉我如何使用此 malloc 函数将内存分配给“ptr”?它与整数数组中的内存分配有何不同?

最佳答案

1。用语言回答

存储持续时间不同。如果您使用整数数组,它可能位于文件范围内(在任何函数之外):

int arr[5];

它具有静态存储持续时间,这意味着该对象在程序的整个执行时间内都处于事件状态。

另一种可能性是在函数内部:

void foo(void)
{
int arr[5];
}

此变体具有自动存储持续时间,因此只有当程序执行在此函数内部时,对象才处于事件状态(更一般地说:在变量的范围内,即括起的大括号对) : { ... })

如果您使用malloc(),则该对象具有动态存储期限。这意味着由您决定对象的存活时间。它会一直保持事件状态,直到您对其调用 free()

2。从操作系统角度回答

malloc() 通常在上实现。这是地址空间的一个区域,您的程序可以在其中动态地从操作系统请求更多内存。

相反,对于具有自动存储持续时间的对象,典型的实现将其放置在堆栈上(其中为每个函数调用创建一个新帧)并且< em>静态存储持续时间,它从一开始就位于程序的数据段中。

这部分答案故意有点含糊; C 实现适用于各种各样的系统,而堆栈数据段在许多具有虚拟内存管理的现代操作系统中使用,它们绝不是必需的——以嵌入式平台和微 Controller 为例,您的程序可以在没有任何操作系统的情况下运行。因此,在编写可移植的 C 代码时,您应该(大多数时候)只对语言指定的内容感兴趣。

关于c - malloc 中的内存分配与数组中的内存分配有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44715805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com