IMO一个就够了,为什么calloc
要求将它分成两个参数?为什么calloc需要两个参数,而malloc只有一个参数?
回答
参数名称记录它相当好:
void *malloc(size_t size);
void *calloc(size_t nelem, size_t elsize);
后一种形式允许阵列整齐分配,通过提供的元件和元件尺寸的数量。乘以malloc
可以实现相同的行为。
但是,calloc
也将分配的内存初始化为0. malloc
没有初始化,所以该值未定义。在理论上,由于没有设置所有的存储器,因此可以更快地获得malloc
;这只是可能会被大量注意到。
在this question中,建议calloc
为clear-alloc,malloc
为mem-alloc。
两个参数的另一个好处是可能会进行溢出检查,通常很难(并且很少完成)'malloc'(尽管如果分配的是大小可能会溢出你可能会做错了)。 –
@Chris:也许我们需要一个'cccalloc',它需要6个参数,并且在所有子表达式上用溢出检查分配'a * b + c * d + e * f'字节... ;-) –
我不认为这是对这个问题的回答。这不会问这些工作如何(那么它将只是一个重复的,应该被关闭)。它要求将参数分成两部分的理由,而不是'malloc'的总大小。 –
我想这可能是历史,并早于C为函数创建原型的时代。在没有原型的这些时候,论据基本上必须是int
,typedef
size_t
可能还没有发明。但INTMAX
是您可以分配的最大块,并且可以分配两块,这只会给您更多的灵活性,并允许您分配真正大的数组。即使在那个时候,也有一些方法可以从系统中获取大型页面,默认情况下已将其归零,因此calloc
与malloc
之间的效率差别不大。
如今,随着size_t
和手头的函数原型,这是C.
- 1. 为什么operator []只有一个参数?
- 2. 为什么一个参数ocaml的功能有两个参数
- 3. 只需一个参数,两个给定
- 4. 为什么php memcache连接函数只需要2个参数
- 5. random.choice()需要两个参数?
- 6. 为什么要使用只有一个参数的string.Format?
- 7. 为什么'自我'需要成为一个函数参数?
- 8. 为什么git push有时需要一个localref参数?
- 9. gdb只需要第一个参数
- 10. TypeError:count()只需要一个参数
- 11. 函数需要2个参数时,应只有一个
- 12. 为什么IEqualityComparer <T> Equals方法需要两个参数?
- 13. 为什么这个查询需要一个参数?
- 14. 为什么我的IBAction函数需要一个参数?
- 15. 为什么只有一些Tkinter回调函数需要参数,而另一些则不需要
- 16. calloc()函数,而不是malloc()
- 17. 为什么基类有一个需要0个参数的构造函数?
- 18. JavaScript去抖功能,为什么只有两个参数?
- 19. TypeError:__init __()只需要3个参数(给出2个参数)
- 20. TypeError:__init __()只需要1个参数(给出3个参数)pyXML
- 21. TypeError:只需要1个参数(给出2个参数)
- 22. Laravel FileManager iconv()只需要3个参数,给定4个参数?
- 23. 当我仅声明一个选项参数时,为什么需要提供两个选项参数?
- 24. 为什么Convert.ChangeType需要一个对象参数?
- 25. 为什么绘制XNA()需要一个色彩参数
- 26. 为什么np.ndarray .__ deepcopy__需要一个多余的参数?
- 27. C# - 为什么我需要初始化一个[out]参数
- 28. 为什么Clojure会认为它应该只有一个参数?
- 29. CMBufferQueueCreate需要什么参数?
- 30. 为什么POST获取两个参数?
的丰富的历史只是每天提醒由于一些程序员创建它的方式,并因此永远留... – 2011-09-24 01:45:20
如果你不'不喜欢它,'#define calloc(x)(calloc)(x,1)'应该工作。 –
@Chris使用预处理器重新定义malloc或family似乎是一个非常糟糕的想法(除了可能用于调试内存分配)。 – ssube