4

在编写应用程序时,我编写了一个查找表(一个整数数组)

在执行查找时,我编写了一个 api,它接受输入并返回一个输出,并且查找表是在该 api 中定义的。?

我是否应该在全局范围内将该查找数组初始化为 const 数组(将其放在数据段中)

在 api 中初始化它/在数据段中定义它有什么好处?

PS:查找表的大小小于 50。

4

4 回答 4

3

我的典型做法是:

int lookup_stuff(int stuff)
{
   static const int table_of_stuff[] = { 1, 2, 7, 8, 14, 20, 24, 29, ... }; 

   assert(stuff < sizeof(table_of_stuff)/sizeof(table_of_stuff[0])); 
   /* if stuff comes from an external source, such as a user modifiable text file, 
      the assert should be converted to an "if" so that it's present in all 
      versions of the code, not just debug builds */
   return table_of_stuff[stuff]; 
}
于 2013-07-04T11:20:00.563 回答
3

封装原则说,每个“类”(或对象,或结构,..)都必须公开最少的有关其内部结构的信息,因此这取决于您的设计。

通常将查找表声明为 const array 是一个很好的规则:编译器将优化该数组(例如,将其置于低速写入时间和良好访问时间的内存库中)。

如果您需要从位于多个文件中的代码访问查找表,请在单独的文件中声明您的表,xxxLookupTable.c在它周围编写一个包装器(如xxxLookupTableManagerxxxLookupTable.h并在需要查找的地方链接标题

于 2013-07-04T11:08:41.007 回答
1

所有软件设计中最重要的当务之急是管理复杂性,如果将查找表定义为全局结构,则以后可能会在访问查找表的模块之间创建不必要的依赖关系。因此,拥有 API 是一种更好的方法恕我直言(假设没有其他因素的性能)。例如,使用 API,您可以更改查找表的大小,而不必担心某些模块假定某个大小并进行错误处理。

于 2013-07-04T11:43:57.943 回答
0

避免全局的一个选项是在提供查找功能的函数内将其声明为静态。

于 2013-07-04T11:04:25.207 回答