gpt4 book ai didi

c++ - 在堆栈上复制成员值或使用指针访问它?

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

所以我得到了一个结构,它包含一个整数。我通常在堆上创建该结构。如果我现在将指向这种结构的指针传递给函数并使用整数成员,如果我首先复制堆栈上的成员值并在函数中使用该局部变量会更快,还是我应该通过访问成员指针?什么可能更快?显然我不想修改成员值。代码示例:

示例结构:

struct sample_s
{
int sample_member;
}

方式一:

void sample_func(struct sample_s *sample_instance)
{
for(int i = 0; i < 1000; i++)
{
printf("%d", sample_instance->sample_member);
}
}

方式二:

void sample_func_two(struct sample_s *sample_instance)
{
int a = sample_instance->sample_member;
for(int i = 0; i < 1000; i++)
{
printf("%d", a);
}
}

最佳答案

在您的特定情况下,sample_func_two 可能 更快。这是因为您正在调用外部函数 printf:

printf("%d", sample_instance->sample_member);

编译器可能不知道这个调用不会修改*sample_instance1,所以它会每次从内存中重新加载sample_member循环时间。

现在至于这是否会对程序的运行时间产生实际影响,您必须自己进行基准测试。


1 编译器不知道,因为它看不到 printf(它在某处的库中)和 printf 的代码未声明为纯的。事实上,printf 不能声明为纯格式,因为它可能会通过其参数(使用 %n)写入格式字符串。

关于c++ - 在堆栈上复制成员值或使用指针访问它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50642417/

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