gpt4 book ai didi

c - 循环内定义的局部变量

转载 作者:行者123 更新时间:2023-12-01 08:55:14 25 4
gpt4 key购买 nike

我有一个函数和几个嵌套循环。每个循环使用不同的变量,其他变量未使用。

我的问题是出于优化方面的考虑。

问题是:哪种方法更好?

在循环体内定义局部变量

void aspProtocolDetectEvents()
{
uint8_t arrayIndex;
for( arrayIndex = 0; arrayIndex < sizeof(__aspProtocol_events); arrayIndex++ )
{
uint8_t contextBitPosition;
for(contextBitPosition = 0; __aspProtocol_events[arrayIndex] != 0; contextBitPosition++)
{
__aspProtocol_Event contextEvent = utils_getAbsoluteBitPosition(__aspProtocol_events, arrayIndex, contextBitPosition);
if( __aspProtocol_isRisenEvent(contextEvent) )
{
__aspProtocol_dispatchEvent(contextEvent);
__aspProtocol_clearEvent(contextEvent);
}
}
}
}

还是像这样在函数体的开头定义它们更好?:

void aspProtocolDetectEvents()
{
uint8_t arrayIndex;
uint8_t contextBitPosition;
__aspProtocol_Event contextEvent;
for( arrayIndex = 0; arrayIndex < sizeof(__aspProtocol_events); arrayIndex++ )
{
for(contextBitPosition = 0; __aspProtocol_events[arrayIndex] != 0; contextBitPosition++)
{
contextEvent = utils_getAbsoluteBitPosition(__aspProtocol_events, arrayIndex, contextBitPosition);
if( __aspProtocol_isRisenEvent(contextEvent) )
{
__aspProtocol_dispatchEvent(contextEvent);
__aspProtocol_clearEvent(contextEvent);
}
}
}
}

我的意思是,我不知道编译器是否优化了它。在代码结构方面我更喜欢第一个例子,但如果它花费更多时间(每次循环迭代时分配)我将不得不妥协,并使用第二个。

最佳答案

因为他们是本地人,他们将被分配到堆栈上。编译器将通过在调用函数时调整堆栈指针来执行此操作,以确保它有足够的空间供所有局部变量使用。

我不会担心如何为嵌套作用域中的变量分配空间。如果您认为在使用局部变量时遇到速度问题,请使用分析器进行测量,但我怀疑担心这是过早优化的典型案例。而是编写可读和可维护的代码。

关于c - 循环内定义的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42950124/

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