结构,typedef和malloc,calloc

问题描述 投票:1回答:2

我想创建和使用类似:

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(...);

您认为,考虑到这些操作将非常频繁地进行,这是分配和取消分配结构的最佳选择?

c struct malloc typedef free
2个回答
2
投票

calloc()malloc()几乎相同。

calloc()0 s初始化要求保护的内存。

[当您调用malloc()并尝试访问分配的类型的成员时,您将看到垃圾值(例如,对于int,您将看到类似347289472的值),而对于calloc(),您将看到0s作为初始值值


1
投票

我是否应该使用“ typedef struct”?优点和缺点是哪些?

这只是主观的编码风格。最常见的样式是使用typedef。优点之一是它使代码的行为类似于C ++。明确键入struct name也可以,这是Linux偏爱的样式。两种风格都不是对还是错。

但是,对于自引用结构,无论样式如何,都必须始终使用struct表示法编写指针成员。

typedef struct foo
{
  struct foo* next;
} foo_t;

foo_t* next将不起作用,因为此时typedef尚未完成。 foo是一个“结构标记”,而不是类型名称,因此它遵循不同的规则。如果希望在内部使用typedef名称,则必须向前声明该结构:

typedef struct foo foo_t;  // forward declaration
struct foo
{
  foo_t* next;
};

当我分配内存时,有人告诉我calloc比malloc更好,因为它可以完成相同的工作,但是效果更好...

[当有人告诉你时,问他们calloc到底有多好。在编程时,批判性思维非常重要。

  • malloc分配一块内存,但不将其初始化为已知值。由于没有初始化,因此malloccalloc快。
  • calloc分配一块内存,或者可选地分配一块放置在相邻内存单元中的数组。它将所有内存归零初始化,这意味着它具有已知的默认值。因此,它比malloc慢。

那么哪个是“更好”的,更快的或预先初始化的?取决于您要做什么。

© www.soinside.com 2019 - 2024. All rights reserved.