在编写应用程序时,我编写了一个查找表(一个整数数组)
在执行查找时,我编写了一个 api,它接受输入并返回一个输出,并且查找表是在该 api 中定义的。?
我是否应该在全局范围内将该查找数组初始化为 const 数组(将其放在数据段中)
在 api 中初始化它/在数据段中定义它有什么好处?
PS:查找表的大小小于 50。
在编写应用程序时,我编写了一个查找表(一个整数数组)
在执行查找时,我编写了一个 api,它接受输入并返回一个输出,并且查找表是在该 api 中定义的。?
我是否应该在全局范围内将该查找数组初始化为 const 数组(将其放在数据段中)
在 api 中初始化它/在数据段中定义它有什么好处?
PS:查找表的大小小于 50。
我的典型做法是:
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];
}
封装原则说,每个“类”(或对象,或结构,..)都必须公开最少的有关其内部结构的信息,因此这取决于您的设计。
通常将查找表声明为 const array 是一个很好的规则:编译器将优化该数组(例如,将其置于低速写入时间和良好访问时间的内存库中)。
如果您需要从位于多个文件中的代码访问查找表,请在单独的文件中声明您的表,xxxLookupTable.c
在它周围编写一个包装器(如xxxLookupTableManager
)xxxLookupTable.h
并在需要查找的地方链接标题
所有软件设计中最重要的当务之急是管理复杂性,如果将查找表定义为全局结构,则以后可能会在访问查找表的模块之间创建不必要的依赖关系。因此,拥有 API 是一种更好的方法恕我直言(假设没有其他因素的性能)。例如,使用 API,您可以更改查找表的大小,而不必担心某些模块假定某个大小并进行错误处理。
避免全局的一个选项是在提供查找功能的函数内将其声明为静态。