【问题标题】:4 bytes string vs 4 bytes integer readed as a string4 字节字符串与 4 字节整数作为字符串读取
【发布时间】:2015-04-24 03:30:33
【问题描述】:

读取包含 4 个字符(包括空终止符)的字符串(声明为数组/指针)是否会比整数值慢(逐字节读取?),读取为字符串,如下所示:

static int val = 'C' + '+' * 256 + '+' * 256 * 256;
printf("%s", (char*)val);

【问题讨论】:

    标签: c string pointers memory-management


    【解决方案1】:

    最好的答案是不要这样做!

    完整的答案是:如果您的处理器使用 little endian 字节顺序(例如:Intel 架构)并且 int 至少为 32 位,那么您的代码的以下修改版本将产生预期的输出:

    static int val = 'C' + '+' * 256 + '+' * 256 * 256;
    printf("%s\n", (char*)&val);
    

    在标准输出上输出这一行:

    C++
    

    因为0x2b2b43在内存中的字节表示是0x43 0x2b 0x2b 0x00。 val 的地址指向与字符数组"C++" 相同的字节。强制转换不会更改地址,但会阻止编译器警告。

    【讨论】:

    • 哦,是的。我忘记了参考。但你实际上并没有回答这个问题——它更快吗?
    • 为什么我不应该这样做?
    • @AlanSalios 这不是特别可读或可维护的。至于速度,请在您的系统上使用您使用的任何编译器和数据进行测量。
    • 怎么样?通过设置计时器?
    • 你不应该使用这样的技巧,因为它们不便携,不可读,误导,无用......性能将是一个糟糕的借口。另一方面,如果您正试图摆脱随意的代码阅读器,那么您可以玩无数更有效的技巧。
    猜你喜欢
    • 2021-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 2012-04-21
    相关资源
    最近更新 更多