Chr*_*ris 8 c linux memory parameters
我注意到这有很多C函数调用,特别是处理内存或文件操作的函数,但并非所有函数都使用这两个参数.例如,malloc传递一个参数,即所需内存空间的大小(以字节为单位).另一方面,Calloc传递两个参数,一个元素的字节大小和元素的数量(大小和nmem).还有其他函数也使用这些大小和nmem参数.
从本质上讲,calloc调用将分配与调用malloc(nmem size)相同的内存量,因此所有真正发生的事情是asterisk()被替换为逗号(,).至少这是我能从更高层面告诉我的工作.我没有看到调用calloc(1,nmem size),calloc(nmem size,1)或calloc(nmem,size)的区别.
是否有一些实际发生在较低级别的事情使调用calloc(1,nmem*size)与calloc(nmem,size)根本不同?
编辑:我知道calloc和malloc之间的功能差异.我很感兴趣为什么参数有差异.还有其他函数使用2个大小参数作为总大小(fread,fwrite等).我并不关心具体的功能,而是为什么函数中使用的总大小有两个参数,而基本上总大小变成两个参数相乘.我发现大多数时候使用这些函数时,我使用"size"参数中需要的大小,"nmem"(有时是"count"等)参数使用"1".
是否确实在较低级别发生了一些事情,使得调用例如 calloc(1, nmem*size) 与 calloc(nmem, size) 根本不同?
这种解释的尝试完全依赖于 libc 实现 - 因此由特定 libc 作者欣赏:
由于calloc()将内存归零,其基本原理可能是它可能(可能)在执行mult.
相反,malloc()有机会使用预先计算的值,可能会减少可能更容易满足的调用中的开销。
不要忘记,C 语言是在每个 CPU 周期成本很高的时候设计的 - 因此与许多其他“高级”语言相比,C 语言的设计非常精简。
这个问题也许可以由 C Dennis Ritchie 的作者更好地回答。
| 归档时间: |
|
| 查看次数: |
425 次 |
| 最近记录: |