0

私はロボットハードウェアのシリアル通信部分を書こうとしています。私はデスクトップPCのマザーボードを持っています。メモリ制限はありません。(Fullspeed)またはシリアル番号115200ボーレートを使ってマイクロコントローラと通信するそのプログラムのメモリ制限はありません。(8GB RAM, i3 cpu etc.) 問題の小ささを混乱させます。私は彼らがこのコミュニケーション機能を使用している20から30の方法を持っています。メモリを割り当てて解放します。最初に割り当て、毎回処理する

どちらが速い処理に効果的ですか?この関数の1つのインスタンスだけが同時に実行されています。

  1. 最初に定義し、毎回使用します。

    ... 
    private: 
        struct timespec ctv1, ctv2; 
        double time_diff; 
        int serial_write_ret; 
        int ret_val; 
    ... 
    int MSerial::genAndSend_setInt32Command() 
    { 
        genSum (stm_buf_t); 
        sem_wait (&serial_mutex); 
        // someFunctions(); 
        sem_post (&serial_mutex); 
        return ret_val; 
    } 
    
  2. または、毎回割り当てて割り当てを解除します。

    int MSerial::genAndSend_setInt32Command() 
    { 
        genSum (stm_buf_t); 
        struct timespec ctv1, ctv2; 
        double time_diff = .0; 
        int serial_write_ret; 
        int ret_val = TIMEOUT_ERROR_IN_SERIAL; 
    
        sem_wait (&serial_mutex); 
        // someFunction(); 
        sem_post (&serial_mutex); 
        return ret_val; 
    } 
    

は本当に重要なことの違いですか?

+1

、 '最初の定義、使用everytime'は良好です。しかし、その差はごく小さいので、気づかないでしょう。 – GMichael

+0

ありがとうございました!私の通信速度はこれらのレベルには達しませんが、速度が480,000,000ボー(USB 2.0)に達する場合でも問題はありませんか? –

+1

実際の違いは、 'genAndSend_setInt32Command'内のローカル変数の初期化です。それは数ダニ以上でなければならない。また、好きなときに測定することもできます。 – GMichael

答えて

0

マイ怠惰...

これは80 * 60 * 5の期間の結果(Hzでは、x分秒をX)ある:ここ

Process only:: mean: 0.00356445 in seconds 
Alloc Dealloc:: mean: 0.0743379 in seconds 

コードと冗長出力する。

割り当て - 毎回割り当て解除

class AllocEvery 
{ 
public: 

    int doSomething() 
    { 
     double pi, gold, ogh; 
     std::string den_rit, jobs, bill; 
     char c_str[64]; 

     pi = 3.1415926535; 
     gold = 1.6180339887; 
     ogh = 0.0000000033; 
     ogh += pi; 
     ogh += gold; 
     jobs = "Being the richest man in the cemetery doesn't matter to me. Going to bed at night saying we've done something wonderful, that's what matters to me."; 
     bill = "Your most unhappy customers are your greatest source of learning."; 
     den_rit = "UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity."; 
    } 
}; 
のみの

プロセス:

class ProcessOnly 
{ 
public: 

    double pi, gold, ogh; 
    std::string den_rit, jobs, bill; 
    char c_str[64]; 

    int doSomething() 
    { 
     pi = 3.1415926535; 
     gold = 1.6180339887; 
     ogh = 0.0000000033; 
     ogh += pi; 
     ogh += gold; 
     jobs = "Being the richest man in the cemetery doesn't matter to me. Going to bed at night saying we've done something wonderful, that's what matters to me."; 
     bill = "Your most unhappy customers are your greatest source of learning."; 
     den_rit = "UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity."; 
    } 
}; 

異なる実験から主

int main (int argc, char **argv) 
{ 
    int max = 80 * 60 * 5; // Rate * Seconds * Minutes 
    struct timespec time1, time2; 
    double time_diff = .0; 
    AllocEvery obj; /// ProcessOnly obj; 

    clock_gettime (CLOCK_MONOTONIC, &time1); 

    for (int i = 0; i < max; i++) 
    { 
     obj.doSomething(); 
    } 

    clock_gettime (CLOCK_MONOTONIC, &time2); 

    time_diff = time2.tv_sec - time1.tv_sec + (time2.tv_nsec - time1.tv_nsec)/BILLION; 

    std::cout << "Process only:: Elapsed time: " << time_diff << std::endl; 

return 0; 
} 

出力:この場合

[email protected]:~/C_denemeler/tryspeed_cpp$ ./a.out 
------------> Alloc - Dealloc Everytime:: Elapsed time: 0.075384 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./a.out 
------------> Alloc - Dealloc Everytime:: Elapsed time: 0.0741677 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./a.out 
------------> Alloc - Dealloc Everytime:: Elapsed time: 0.074426 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./a.out 
------------> Alloc - Dealloc Everytime:: Elapsed time: 0.0740817 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./a.out 
------------> Alloc - Dealloc Everytime:: Elapsed time: 0.0734898 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./a.out 
------------> Alloc - Dealloc Everytime:: Elapsed time: 0.0747045 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./a.out 
------------> Alloc - Dealloc Everytime:: Elapsed time: 0.0727975 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./a.out 
------------> Alloc - Dealloc Everytime:: Elapsed time: 0.0772903 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./a.out 
------------> Alloc - Dealloc Everytime:: Elapsed time: 0.0726992 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./p.out 
------------> Process only:: Elapsed time: 0.00806864 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./p.out 
------------> Process only:: Elapsed time: 0.00727956 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./p.out 
------------> Process only:: Elapsed time: 0.00202144 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./p.out 
------------> Process only:: Elapsed time: 0.00195636 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./p.out 
------------> Process only:: Elapsed time: 0.00203696 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./p.out 
------------> Process only:: Elapsed time: 0.00387936 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./p.out 
------------> Process only:: Elapsed time: 0.00276425 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./p.out 
------------> Process only:: Elapsed time: 0.00200299 
[email protected]:~/C_denemeler/tryspeed_cpp$ ./p.out 
------------> Process only:: Elapsed time: 0.00207049 
関連する問題