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

时间:2018-09-08 10:33:07

标签: c arrays pointers malloc

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

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

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

2 个答案:

答案 0 :(得分:3)

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

  

如果上述情况成立...

由于这不是事实,因此不能从中得出结论。

答案 1 :(得分:1)

malloc是标准C库的功能。

所有功能都在运行时调用。

在编译时唯一发生的事情是创建对malloc

的函数调用