gpt4 book ai didi

C : cost of copying data from heap to stack?

转载 作者:太空宇宙 更新时间:2023-11-04 07:24:09 25 4
gpt4 key购买 nike

我正在学习 C,想询问最佳实践。

这里有两个实现(衬衫是结构体):

实现1:

void printShirt(shirt shirt){
printf("(%d , %s)",shirt.size,shirt.color);
}
void printShirts(shirt * shirts, int nbShirts){
int i;
for(i=0;i<nbShirts;i++) printShirt(shirts[i]);
printf("\n");
}

实现 2:

void printShirt(shirt * shirt){
printf("(%d , %s)",shirt->size,shirt->color);
}
void printShirts(shirt * shirts, int nbShirts){
int i;
for(i=0;i<nbShirts;i++) printShirt(&shirts[i]);
printf("\n");
}

如果我是正确的(?),在实现 1 中,每件衬衫的数据在打印前从堆复制到堆栈。但这在实现 2 (?) 中不会发生。

对于大型数组和结构,这可能会产生影响吗?是否有一些最佳实践可供遵循?

最佳答案

是的,这会对大型结构或小型结构的大型数组产生影响,除非编译器能够优化调用。当您已经拥有数据副本时,避免复制数据更为正常 - 特别是如果您不打算修改该副本。

复制结构非常快 - 它基本上只是将字节从内存中的一个位置传输到另一个位置......但是复制指针更快。如果结构很小,您可以考虑复制它以避免额外的指针取消引用。但是,到现在为止,您很可能过早地进行了优化。

回到指针方法,通常你会帮助程序员意识到数据不会通过接收一个const指针来修改:

void printShirt( struct shirt const * shirt )

你的例子有点天真,因为 printf 的成本远远大于复制一个相对较大的结构。但我明白你想问什么。

关于C : cost of copying data from heap to stack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19579895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com