在 C 中使用 short 是一种不好的做法
Posted
技术标签:
【中文标题】在 C 中使用 short 是一种不好的做法【英文标题】:Is using short in C a bad practice 【发布时间】:2018-09-13 13:08:50 【问题描述】:我有一个内存敏感项目,它使用整数将顶点的索引存储在图的密集前驱树中。 (您使用例如 Bellman Ford 生成的东西)。我知道一个事实,即我不会拥有超过 10000 个顶点的图,并且数据类型一旦创建就是不可变的。
所以在我的情况下替换是一种不好的做法
int predecessors[blah];
与
short predecessors[blah];
如果我的作品被用作图书馆。
【问题讨论】:
我想说你应该typedef short vertex_id_t;
能够轻松替换类型。否则,只要它提供真正的性能/内存消耗改进,我认为它没有问题。
寻找最佳实践来代替常识是一种不好的做法。
我的荣幸。如果您必须两次由不同的人撤消对您的问题的相同编辑,那么我建议您开始考虑为什么您的问题似乎会邀请该编辑...(我承认我只是在您之后才意识到上一次的编辑+撤消解开我的。)
如果您想将计数的宽度限制为 16 位,请使用 uint16_t
(或 int16_t
,如果您需要 -1 作为某种标记,而 0xFFFF 不会这样做)。跨度>
一般来说,对于“使用 X 是一种不好的做法”这个问题(其中 X 是语言的组成部分),答案是“不,这取决于"。
【参考方案1】:
避免过早优化。衡量使用short
而不是int
的影响,然后根据该信息做出决定。
正如 @HolyBlackCat 所说 - 考虑使用 typedef(或类似的),以便在更改需求时可以更改底层类型(即 short
到 int
)。
如果您使用short
,请添加健全性检查以避免有人,有一天在您的库中提供 100.000 个顶点并且没有意识到它无法处理这些(直到一个无声的失败变成一个非常非无声的失败,代价高昂设备大声撞击某物)。
明确说明您最多只能处理 X 个顶点。
【讨论】:
以上是关于在 C 中使用 short 是一种不好的做法的主要内容,如果未能解决你的问题,请参考以下文章