在数据存储区和全局变量之间进行确定

时间:2015-06-24 20:50:34

标签: c++ c stack heap

描述

对于混合C / C ++(包含在extern“C”中的C ++)应用程序,我正在编写我正在尝试确定是否更好地包含一些静态定义,我的程序需要作为全局变量运行或在需要在每次运行时读取的外部数据存储(即.csv文件或sql数据库)。

我的静态定义,当在csv文件中布局时,取每个appx 15列,最多40个定义(小于开始时的定义,但由于特征缩放,最多40个)。

问题

我被撕裂了,因为我觉得错误的是包含如此多的数据作为在编译时加载程序的全局变量。但是,每次在编译后运行程序时从数据存储区读取的开销似乎都是不必要的。

问题

这里的最佳做法是什么?我的代码需要足够便携,以便其他人理解,我不想混淆它。

3 个答案:

答案 0 :(得分:2)

使用高级语言从CSV生成单独的C文件可能是合适的,例如蟒蛇。然后do { while ( isspace( *rd ) ) // while rd points to whitespace rd++; // advance rd } while ( (*wr++ = *rd++) ); // copy rd to wr, advance pointers until // we see the string terminator 生成的文件(仅在使用#include的单个模块中使用时),或者作为单独的编译单元。

通过这种方式,您可以轻松更改所选CSV /电子表格程序中的值,同时仍然可以获得所有数据。代码生成程序可以由构建系统调用,因此不需要手动编写。

答案 1 :(得分:0)

出于速度原因和代码清晰度,静态定义这些变量。很好地列出您的定义并慷慨地评论,以帮助未来的代码查看者。在文件中,您无法发表评论以通知未来的编辑器所有内容。它只是慢了。

答案 2 :(得分:0)

最佳实践是实现这两个选项,并灵活地根据内存,计算速度和其他负载条件在实现之间切换。

如果应用程序将在服务器端运行并为内存/ CPU提供大量分配,那么设计到那些条件。你说的为什么“感觉不对”?

您的最终目标尚未明确定义。所以混淆不是问题。当您故意重定向编码以隐藏曲目时,会出现混淆。但是,如果需要的话,制定一个完整的解决方案并不是混淆。