将所有C代码写在一个源文件中是否真的可以使程序运行更快?

时间:2019-02-21 17:32:54

标签: c performance compilation

我只是注意到在sqlite 3源代码文件的开头,它说:

Array ( [Oh] => Array ( [state] => Oh ) [income] => 100 [count] => 1 [Ky] => Array ( [state] => Ky ) )

Array (
   [OH] => Array 
   ( [income] =>
     [count] =>
   )
   [KY] => Array
   ( [income] =>
     [count] =>
   )   

Here is my code
Example data in $array
Array ( [0] => Array ( 
[SurveyDate] => 1952-06-21 
[Income] => 100 
[CountyState] => Hamilton|Oh 
[count] => 1 ) )

function update_array_value3( $array )
{
    foreach ($array as $row) 
    {
        $arrCountyState = explode( "|", $row['CountyState'] );

        $key = $arrCountyState[1];  // OH or KY

        if( !isset( $_SESSION['sIncome'][$key] ) )
        {
            $_SESSION['sIncome'][$key]['state'] = $key;
            $_SESSION['sIncome'][$key]['income'] = $row['Income'];
            $_SESSION['sIncome'][$key]['count'] = 1;
        } else
        {
            $_SESSION['sIncome'][$key]['state'] = $key;
            $_SESSION['sIncome'][$key]['income'] += $row['Income'];
            $_SESSION['sIncome'][$key]['count'] += 1;
        }
    }

我以前不知道这一点,也找不到权威的资料来备份它。这是真的?那么C ++呢?

1 个答案:

答案 0 :(得分:5)

它不会自动使其更快,但是有一些道理。将所有内容都保存在一个文件中,可使编译器进行优化,否则将无法进行优化。例如,一个函数不能内联,除非它属于与之相同的翻译单元

内联函数基本上意味着将函数调用替换为函数主体。这样的好处是您可以跳过跳转到功能代码和返回跳转的步骤。但是,如果该函数在另一个转换单元中,则编译器将仅知道该函数的原型,而不是函数主体,这又意味着它必须执行跳转。

话虽如此,我强烈建议不要使用这种方法。如果您确实需要进行最后的调整,请使用可以从源代码树创建单个c文件的某种脚本。