我想创建和使用类似:
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(...);
您认为,考虑到这些操作将非常频繁地进行,这是分配和取消分配结构的最佳选择?
calloc()
和malloc()
几乎相同。
calloc()
用0
s初始化要求保护的内存。
[当您调用malloc()
并尝试访问分配的类型的成员时,您将看到垃圾值(例如,对于int
,您将看到类似347289472
的值),而对于calloc()
,您将看到0s作为初始值值
我是否应该使用“ 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
分配一块内存,但不将其初始化为已知值。由于没有初始化,因此malloc
比calloc
快。calloc
分配一块内存,或者可选地分配一块放置在相邻内存单元中的数组。它将所有内存归零初始化,这意味着它具有已知的默认值。因此,它比malloc
慢。那么哪个是“更好”的,更快的或预先初始化的?取决于您要做什么。