gpt4 book ai didi

C 实现可以使用长度前缀字符串 "under the hood"吗?

转载 作者:太空狗 更新时间:2023-10-29 15:48:39 24 4
gpt4 key购买 nike

读完这个问题:What are the problems of a zero-terminated string that length-prefixed strings overcome?我开始怀疑,究竟是什么阻止了 C 实现为分配在堆栈或堆上的任何 charwchar_t 数组分配一些额外的字节并将它们用作“string prefix"来存储其元素的个数 N?

然后,如果第 N 个字符是 '\0',则 N - 1 表示字符串长度。

我相信这可以极大地提高 strlenstrcat 等函数的性能。

如果程序广泛使用非 0 终止的 char 数组,这可能会导致额外的内存消耗,但这可以通过编译器标志打开或关闭编译代码的常规“count-until-you-reach-'\0'”例程。

这样的实现可能会遇到哪些障碍? C标准是否允许这样做?这项技术会导致哪些我没有考虑到的问题?

而且……这真的有人做过吗?

最佳答案

可以存储分配的长度。 malloc 实现确实做到了这一点(或者至少有些实现)。

但是,您不能合理地存储分配中存储的任何字符串的长度,因为用户可以随心所欲地更改内容;保持最新的长度是不合理的。此外,用户可能会在字符数组的中间某处开始字符串,或者甚至可能不会使用数组来保存字符串!

关于C 实现可以使用长度前缀字符串 "under the hood"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30463248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com