1

我对在 C 编程语言中使用全局变量有一些疑问。这些天来,我从来没有太多不再使用全局变量。所以,我的问题是:在 C 中何时使用或不使用全局变量?有人可以给我一些解释吗?性能问题,当然,应该包括在内。

一个更具体的案例来帮助回答这个问题:例如,如果我有一个包含structs 的全局数组,几乎所有函数都可以通过程序访问,我需要在每个函数调用中获取这个数组的两个成员。在这种情况下,我需要为这个数组中我想要访问的成员创建两个变量(指针)。像这样foo_t *x,*y。在程序运行时,它会发生多次并且在不同的功能中发生。x在这种特定情况下,应该是y全局变量还是局部变量(调用它的每个函数)?

有些人认为这对计算机的内存和程序性能来说太昂贵了。

我希望这很清楚。

4

2 回答 2

1

尽管全局内存和动态内存分配是独立的项目,但我倾向于看到成对使用:大量全局内存而分配很少,或者很少全局内存和大量动态内存使用。

全局变量(或外部可链接内存等)如今在对生命至关重要的应用程序中具有有效用途。在空中交通管制和生命科学领域都工作过,一些应用程序使用动态分配的内存。相反,通常有大型全局数组。这样的应用程序不能容忍某个时间下线的内存不足,并且需要证明应用程序可以在启动时处理所有指定的容量。

在一些微控制器应用程序中,范围和大小也是众所周知的,因此没有动态分配,并且通常通过全局空间在函数之间共享数据。即使是最坏情况下的堆栈大小也是已知的(不允许递归)。

在需要根据各种处理器、需求等进行扩展的动态应用程序中,良好的编程习惯会避免使用全局内存。我发现这种编码风格更易于维护和增强。

我没有看到速度/代码效率推动全局内存的使用/不使用。这更像是一个软件架构问题。采用 1) 满足您的设计目标和 2) 可调试和可维护的方法。

思想:显存就像全局内存,所有功能和应用程序共享这个空间。

于 2013-05-25T23:44:24.700 回答
1

大多数时候,可维护性比性能更重要。您没有过多地描述您的应用程序,因此我将假设它不是性能关键,并且也没有堆栈大小有限等问题。即可维护性获胜。

在这种情况下,真正的问题是使代码更清晰,并减少出错的机会。这是逐案决定的,尽管我的一般规则是最小化全局变量,特别是具有多个文件范围的全局变量。

如果应用程序是多线程的,事情会变得更加清晰 - 并且更令人兴奋。每个全局变量必须要么是 const,要么受某种锁保护。这包括用“静态”声明的变量。只有在真正共享的情况下才能使事情全球化,从而使您的生活更轻松。

回到你的案例 - 你有某种大型的全球数据结构数组,以及其中的一些特定位置。显然一大堆例程将在相同的位置上运行;否则这个问题没有意义。我会做任何使代码最清晰易读的事情。根据您的描述,这可能是为了使它们成为全球性的,但您没有提供足够的细节让我确定。如果您确实将它们设为全局,那么看在上帝的份上,不要称它们为 x 和 y,除非这些名称具有清晰和明显的意义——例如,如果它们一起代表笛卡尔坐标。

于 2013-05-26T07:39:54.280 回答