malloc如何在编译时和运行时处理? [关闭]

问题描述 投票:-4回答:2

malloc是否用于在编译时指定 - 指针指向的缓冲区(数组)的最大大小,然后默认情况下在运行时和以后分配该最大大小的缓冲区 - 仅实际使用该部分缓冲区(尽管我们需要的全部大小(通过从用户等获取数据)?

如果以上是真的 - 那么这意味着malloc(沿着指针使用)实质上提供了一种方法来模拟(包括更高维度 - 但对于例如-2)2-D数组作为1-d指针数组,然后在编译时time指定要分配给每个单独指针的缓冲区的大小,即基本上完成相同的事情,即将它声明为在编译时在声明中指定的最大维度的二维数组 - 但只是允许以不同方式对其进行建模/可视化。两者都在声明语句的运行时分配了默认的最大大小 - 数组类型声明,而在malloc语句的运行时指针+ malloc类型(我认为在这两种情况下都使用这个大小信息来计算堆栈的大小+运行所需的堆总和)。

那是在指针+ malloc中,一旦编译器看到这个信息(每个指针使用malloc的最大缓冲区大小)在编译时可用 - 编译可以通过,因为它具有默认情况下可以分配多少内存的信息(并且还)使用该信息来计算函数运行所需的堆栈大小+堆总和(如果没有malloc - 那么它指向单个元素)。稍后在运行时 - 在运行malloc语句之后分配最大大小的缓冲区,以便稍后用作输入需求。

c arrays pointers malloc
2个回答
3
投票

有一个原因,为什么使用malloccallocrealloc分配内存称为dynamic memory management。此上下文中的动态意味着在运行时发生的动态。这不会在编译时发生。

如果以上是真的......

由于事实并非如此,因此不能从中得出。


1
投票

malloc是标准C库的一个功能。

所有函数都在运行时调用。

编译时唯一发生的事情就是创建一个对malloc的函数调用

© www.soinside.com 2019 - 2024. All rights reserved.