c - 既然malloc可以分配内存,为什么还需要内存块呢?

标签 c malloc

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

我想知道为什么你需要指定尺寸。您只需指定一个“足够大”的数字,一切都会正常运行。

最佳答案

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

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

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

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

旁注:

您可能会获得比您请求的更多的内存。 malloc 保证您至少获得您要求的数量,除非分配失败。但是,出于显而易见的原因,您应该永远不要指望它。

关于c - 既然malloc可以分配内存,为什么还需要内存块呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47103999/

相关文章:

c - 使用 strtok 时出现段错误核心转储

c - 如何释放使用 malloc 分配的内存?

c - 指向字符串的指针意外更改其值

涉及 ; 的结构数组的编译错误代币

c - 无法理解linux的 "Kill"程序

c - 尝试在控制台上进行子类化

c - 在符合 POSIX 的 C 程序中确定二进制常规文件大小的最佳实践

c - 任何查询分配 block 大小的函数?

c - 为什么 libc 中的内存分配没有路由到我的分配包装器?

c++ - 如果我使用 malloc() 而不是堆栈数组,OpenGL 不会渲染对象?