对于 C++,哪个是最佳方案:未初始化但在 read() 后以 null 终止的 char 数组,或者用零初始化所有元素,然后使用 read()

问题描述 投票:0回答:1

以下代码片段中哪一个是最佳实践、最佳(CPU 利用率)、安全、可读:

{
    char buffer[10];
    ssize_t bytes = read(0, buffer, 9);
    if(bytes > 0)
    {
        buffer[bytes] = '\0';
    }
    else
    {
        // return, break, continue
    }
    // more business logic
}

{
    char buffer[10] = {};
    ssize_t bytes = read(0, buffer, 9);
    if(bytes <= 0)
    {
        // return, break, continue
    }
    // more business logic
}

在哪种架构中这些是首选或不鼓励的。

为了比较,我们

g++ -S -fverbose-asm
as -alhnd
。 这可以帮助比较汇编代码以获得最佳代码选择。 我会尽快添加它的结果。

c++ optimization stack-memory
1个回答
1
投票

这确实是一个太早的微观优化问题。这里可读性比效率更重要,恕我直言,第一个版本的意图更明确:读取一堆字符并以 null 终止它。

此外,缓冲区的零初始化需要写入每个字节。这不是一项非常繁重的任务,因为它可能发生在非常低的级别,但可能比写入一个字节稍微重一些。

© www.soinside.com 2019 - 2024. All rights reserved.