为什么malloc需要内存块才能分配内存?

时间:2017-11-03 20:31:31

标签: c malloc

malloc的语法是malloc(num*sizeof(data_type))

我想知道为什么你需要指定一个大小。你可以指定一个足够大的""数字和一切都会正常运行。

1 个答案:

答案 0 :(得分:4)

语法为malloc(size)。您将其编写为malloc(10*sizeof(int))的唯一原因是因为您很少对确切的字节数感兴趣,而是对元素的数量感兴趣。这也使它便于携带,更容易更改。

如果你知道int的大小是4个字节(可能因系统而异),写malloc(40)而不是malloc(10*sizeof(int))是完全有效的,但这可能会导致错误您为其他系统重新编译,或稍后决定您需要long而不是int

您需要指定尺寸。当你调用malloc(20)时,你会得到一个指向一块20字节的内存块的指针。如果您后来意识到这还不够,可以使用realloc来更改大小。但是你需要指定一个大小,否则操作系统根本不会知道要给你多少内存。此外,如果malloc失败,它会给你一个NULL指针。失败的一个原因是你要求的内存比现有的更多。

你可以要求比你需要更多的记忆。但是原因是什么?结果将是您的程序将需要更多内存。这不是一件好事。

旁注:

您可能获得的内存超出了您的要求。 malloc保证您至少您要求的金额,除非分配失败。但是,你应该 - 出于显而易见的原因 - 永远不要指望它。