【发布时间】:2009-11-20 17:32:40
【问题描述】:
是否可以在 GCC 中全局禁用以 NUL 结尾的字符串?
我使用的是我自己的字符串库,我完全不需要最后的 NUL 字符,因为它已经在内部存储了适当的长度。
但是,如果我想附加 10 个字符串,这意味着在堆栈上不必要地分配了 10 个字节。对于宽字符串,情况更糟:至于 x86,有 40 个字节被浪费;对于 x86_64,80 字节!
我定义了一个宏来将那些堆栈分配的字符串添加到我的结构中:
#define AppendString(ppDest, pSource) \
AppendSubString(ppDest, (*ppDest)->len + 1, pSource, 0, sizeof(pSource) - 1)
使用sizeof(...) - 1 效果很好,但我想知道是否可以摆脱 NUL 终止以节省几个字节?
【问题讨论】:
-
空字符串应该怎么办?你打算如何对付他们?
-
我很确定 80 字节对您的程序来说不会成为问题。尤其是在 x86 上。
-
祝你好运,用你自己的版本替换 C 中的字符串函数。以及您将 nul 终止的字符串传递给的所有函数。并获得足够的性能。您能否详细解释一下您的问题,以免因试图通过在字符串开头分配两个字节来保存一个字节而大喊大叫?
-
确实,这显然是过早的优化。即使许多语言解释器定义了自己的字符串类型,在许多情况下它们仍然包含 0 字节,因为与偶数长度字段/malloc 开销相比,它可以忽略不计。
-
为什么,以 Charles Babbage 的名义,您是否关心像这样节省空间?除非你正在处理一些你没有提到的非常奇怪的问题,否则你不需要这样做,而且你会给自己带来比你解决的问题更多的问题。
标签: c gcc null-terminated