使用全局或非变量的“规则”

时间:2013-05-25 20:09:36

标签: c performance global-variables local-variables

我有一些问题要在C编程语言中使用全局变量。我从来没有太多像这些日子那样不再使用全局变量了。所以,我的问题是:在C中使用或不使用全局变量?有人可以给我一些解释吗?应该包括性能问题。

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

有些人认为计算机的记忆和程序性能太贵了。

我希望这很清楚。

2 个答案:

答案 0 :(得分:1)

虽然全局内存和动态内存分配是单独的项目,但我倾向于看到配对使用:大量全局内存,分配很少或全局很少,动态内存使用很多。

全局变量(或外部可链接内存等)在生命至关重要的应用程序中具有有效用途。在空中交通管制和生命科学部门工作过,一些应用程序使用 no 动态分配内存。通常会有大型全局数组。此类应用程序无法在一段时间内容忍内存不足,需要显示应用程序可以在启动时处理所有指定的容量。

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

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

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

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

答案 1 :(得分:1)

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

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

如果应用程序是多线程的,事情会变得更加清晰 - 而且更令人兴奋。每个全局变量必须是const,或者由某个锁保护。这包括用“静态”声明的变量。如果真的是共享的话,只让全球化的东西让你的生活更轻松。

回到你的案例 - 你有一些大的全球数据结构数组,以及其中的一些特定位置。显然,一大堆惯例将在相同的位置上运作;否则这个问题没有意义。我会做任何使代码最清晰和可读的东西。根据你的描述,这可能是为了让它们全球化,但你没有给我足够的细节以确定。如果你确实把它们变成了全局,那么为了天堂,不要把它们称为x和y,除非这些名称明确而且明显有意义 - 例如如果他们在一起代表笛卡尔坐标。