2010-01-30 68 views
1

本地函数变量初始化需要处理时间吗?例如:本地函数变量初始化需要处理时间吗?

void foo (void) { 
    char *str = "hello"; 
    int num = 3; 
}

或者像全局变量一样,它们的值已经在二进制文件的只读部分中被赋值了吗?

换句话说:调用一个有很多局部变量的函数,比较一个没有函数的函数会耗时吗?

编辑: 我看到很多人在这里感到愤怒,因为它似乎我试图优化我的代码在一个非常挑剔的/糟糕的方式,这不应该被考虑。我知道这一点。我问这个问题只是为了理解事情的行为和功能,而不是为了优化的原因。谢谢。顺便说一句,也许我的代码是在一个低功耗的MCU上?考虑其他选择,PC不是唯一的选择。

+0

指定一个变量可能需要1到4条指令。在1Ghz的处理器上,这只会持续大约1至4纳秒。 – Pace 2010-01-30 19:52:45

+2

您将定义多少个局部变量? 3百万呢?在注意到相当长的时间之前,您将用尽堆栈空间。不要专注于微观优化。 – kennytm 2010-01-30 19:52:45

+0

每当我看到像这样的东西时,我都会生气。显然这需要时间。您必须分配一个变量并设置字符串中的所有字符。这个问题没有定量。学习使用一个分析器,它是唯一的方法来看看你是否应该关心那种开销,它取决于整个特定的程序。你在准确回答什么问题? – 2010-01-30 19:55:54

回答

3

这不是很多时间,但是。这需要时间。

在此示例中,文本“hello”已经作为常量值生活, 但str必须设置为在运行时指向它。

和值3,将不得不存储在num

+0

这个“某处”在哪里?二进制文件的只读部分? – Dor 2010-01-30 20:12:33

+0

@Dor:在MSVC中它将位于二进制文件的只读部分,我不知道其他编译器。 – 2010-01-30 20:15:23

+0

编译为程序集(例如gcc -S)并亲自查看。 – 2010-01-30 20:15:41

0

如果你喜欢冒险的感觉,尝试用objdump有和没有额外的变量dissasembling您的可执行文件。当您在函数中创建更多局部变量时,您会看到编译器插入了额外的指令(设置寄存器或执行加载操作)。每条指令都需要非零时间...