我想创建和使用如下内容:
struct mystruct { 
    mystruct * AnOtherMyStruct; //mystruct must have a pointer to an other mystruct inside
    ...some stuffs...  
};我是否应该使用"typedef struct“?哪些是有利的和不利的?
当我分配内存时,有人告诉我calloc比malloc更好,因为它做同样的工作,但更好……
我的结果将类似于:
struct (or typedef struct) mystruct  {
    mystruct * AnOtherMyStruct;
    ...
};
int main () {
malloc or calloc =...
free(...);考虑到这些操作将被频繁地执行,您认为分配和释放结构的最佳选择是什么?
发布于 2019-11-27 19:37:13
calloc()和malloc()几乎是一样的。
calloc()使用0%s初始化声明的内存。
当您调用malloc()并尝试访问已分配类型的成员时,您将看到垃圾值(例如,对于int,您将看到类似于347289472的值),而对于calloc(),您将看到0作为初始值
发布于 2019-11-27 19:50:53
我是否应该使用"typedef“?哪些是有利的和不利的?
这只是一种主观的编码风格。最常见的样式是使用typedef。一个优点是它使代码的行为就像C++一样。显式地输入struct name也是可以的,这是Linux喜欢的一种风格。这两种风格显然都不是对的或错的。
但是,对于自引用结构,不管是什么样式,都必须始终使用struct表示法来编写指针成员。
typedef struct foo
{
  struct foo* next;
} foo_t;foo_t* next将不会工作,因为在这一点上类型定义并不完整。然而,foo是一个“结构标签”,而不是一个类型名称,所以它遵循不同的规则。如果您希望在内部使用typedef名称,则必须向前声明该结构:
typedef struct foo foo_t;  // forward declaration
struct foo
{
  foo_t* next;
};当我分配内存时,有人告诉我
比malloc更好,因为它做同样的工作,但更好……
当有人告诉你这一点时,问问他们calloc到底是如何更好的。在编程时,批判性思维非常重要。
malloc会分配一块内存,但不会将其初始化为已知值。由于没有初始化,因此malloc比calloc.calloc分配一个内存块,或者可选地分配一个放在相邻内存单元中的块数组更快。它对所有内存进行零初始化,这意味着它具有已知默认值。正因为如此,它比malloc.慢
那么,哪个“更好”,更快还是预初始化?这取决于你想做什么。
https://stackoverflow.com/questions/59068904
复制相似问题