2

我经常将一组相关的全局函数和变量包装在一个结构中,为它们创建一种“命名空间”,例如

extern struct foo_namespace {
    int (* const foo)(int a);
    int (* const bar)(void);
    const int a;
    const int b;
    int x;
    int y;
} foo;

然后将其与.c设置函数和常量的文件链接。

这使我可以创建全局名称而不必担心名称空间中的内容以及稍后会出现的内容,它非常干净和方便。

但是我确实担心它通过要求通过指针调用函数而在我的代码中引入了少量的低效率,并且可能还有其他问题。

以这种方式对全局变量进行分组有哪些潜在问题和低效率,无论是程序设计、速度、可执行文件大小还是其他任何问题。

编辑:我刚刚在结构中运行了一个带有空函数的循环,以及一个常规函数。当未应用优化时,结构中的函数更快(20 秒对 26 秒)。优化后,全局函数被完全优化掉,速度更快。似乎除非函数可以内联,否则就速度而言,这没什么大不了的

4

2 回答 2

2

由于结构对齐,分配了更多内存(更多信息here)。结构实例将具有其最宽标量成员的对齐方式。

于 2017-08-04T20:32:52.273 回答
0

将结构用作 ac “命名空间”的缺点</p>

增加碰撞可能性。

这里的想法是使用foo.a,foo.xfoo.bar()vs. 也许foo_a, foo_x, foo_bar()。现在的问题是foo与任何其他 3 字符foo对象/函数发生冲突。

前缀foo_方法需要 5+ 个字符匹配来碰撞。 IOWs,虽然 OP 的想法确实组织了对象和功能,但它增加了冲突的机会。

于 2017-08-04T21:03:40.103 回答