gpt4 book ai didi

c - malloc 在编译时和运行时如何处理?

转载 作者:行者123 更新时间:2023-11-30 21:15:49 24 4
gpt4 key购买 nike

malloc 是否用于在编译时指定 - 由指针指向的缓冲区(数组)的最大大小,然后在运行时及以后默认分配该最大大小的缓冲区 - 只有缓冲区的那部分实际上是使用了我们需要的(尽管已分配完整大小)(通过从用户等获取数据)?

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

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

最佳答案

使用malloccallocrealloc分配内存被称为dynamic memory management是有原因的。 。在这种情况下,动态意味着在运行时发生的事情。这不会在编译时发生。

If the above is true...

由于这不是真的,因此无法从中推导出以下内容。

关于c - malloc 在编译时和运行时如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52234410/

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