gpt4 book ai didi

c - 在 C 中重复使用 struct 是一种好习惯吗?

转载 作者:太空狗 更新时间:2023-10-29 17:12:11 24 4
gpt4 key购买 nike

假设我有这两个结构来自不同的头文件:

header_1.h

struct main_node {
struct *sec_node
}

header_2.h

struct sec_node {
int var;
}

现在我在 main.c 中使用这两个头文件,代码看起来像这样:

#include <stdio.h>
#include "header_1.h"
#include "header_2.h"

struct main_node *node;

void main()
{
for (int i = 0; i < 1000; i++)
printf( "%d\n", node->sec_node->var) ;
}

假设我没有使用现代优化编译器。我在这个 struct 上循环了很多次,在这里使用临时变量会更快/更好吗?

C 在性能方面有什么不同吗?

void main()
{
int temp = node->sec_node->var;
for (int i = 0; i < 1000; i++)
printf( "%d\n", temp);
}

最佳答案

这不是,但它可能是优化瓶颈的来源。因为编译器看不到外部函数的定义(比如这里的 printf,虽然它可能知道它作为内置函数的属性,因为它是一个标准函数),它必须假设任何外部函数都可以修改任何非const 对象,它可以看到其地址。因此,在您的示例中,nodenode->sec_node 在调用外部函数之前和之后可能具有不同的值。

减轻这种情况的一种方法是像你一样使用临时工,但你也可以使用 restrict 关键字作为对编译器的 promise ,在 的生命周期内restrict 限定的指针,指向的对象将不会被访问,除非通过“基于”restrict 限定的指针。如何做到这一点可能超出了这个问题的范围。

关于c - 在 C 中重复使用 struct 是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52669926/

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