gpt4 book ai didi

c++ - C++中声明指针指针的效率

转载 作者:行者123 更新时间:2023-11-30 01:53:56 26 4
gpt4 key购买 nike

这听起来像是一个小问题,但在我创建的程序中,我有一个递归函数,我在其中声明了一个指向类“QuadTree”的指针。

即:

void check_tree(QuadTree* p_qtree, Object* p_obj)
{
if (!p_qtree->is_leaf())
{
QuadTree** children = p_qtree->get_children(); // <-- WHAT I'M REFERRING TO
for (int i = 0; i < 4; i++)
check_tree(children[i], p_obj);
}
else
{
...
}
}

在递归函数中声明“四叉树**”是否会因为函数的重复调用而降低程序的效率,或者影响可以忽略不计?像下面这样在函数外声明是不是更好?

QuadTree** children;   // <-- MOVE DECLARATION TO HERE
void check_tree(QuadTree* p_qtree, Object* p_obj)
{
if (!p_qtree->is_leaf())
{
children = p_qtree->get_children();
for (int i = 0; i < 4; i++)
check_tree(children[i], p_obj);
}
else
{
...
}
}

我最初的想法是,在递归函数中声明指向指针的指针的影响可以忽略不计,因为它只为指针而不是整个类分配内存,但我不太确定。任何反馈都会很棒。

最佳答案

在性能方面,分配大小为 n 的堆栈和分配大小为 m 的堆栈之间没有区别(它们都编译为读取寄存器、添加常量值并将值存储回同一个寄存器)。

在内存方面,通过在函数内声明变量,堆栈的每一层将使用额外的 8 个字节(在 64 位机器上)或 4 个字节(在 32 位机器上)。国际海事组织,可以忽略不计。此外,当可以安全地完成此操作时,编译器可能会对其进行优化。

在正确性方面,在外部分配内存会使您的函数不可重入。当您使用多线程时,这可能是个问题。

关于c++ - C++中声明指针指针的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22618348/

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