假设我们有一个非常大的结构,在分配时会占用大量的内存空间

Dav*_*vid 2 c struct pointers

我是C的新手(以及C中的结构).我在互联网上看到了不同的代码示例,但这样做有什么好处:

void foo(LargeStruct* struct);

而不是这个

void foo(LargeStruct struct);

它是否使内存管理更容易?

Dav*_*rtz 5

前者将指向结构的指针传递给函数.后者制作结构的副本并将其传递给函数.如果结构很大,为函数复制它是很昂贵的(使用大量资源),所以除非必要,否则应该避免使用它.


das*_*ght 5

C struct按值传递s.这意味着具有第二个签名的函数将复制整个函数LargeStruct以便将其传递给foo.就存储器使用而言,这是不经济的.

更糟糕的是,分配LargeStruct会发生在自动内存中(也称为"堆栈上").根据您的实际大小,struct在某些系统上可能无法进行调用,因为它会导致堆栈溢出.

另一方面,第一种方法传递structby指针.指针的大小不依赖于大小LargeStruct.