タグ付けされた質問 「c」

Cは、システムプログラミング(OSおよび組み込み)、ライブラリ、ゲーム、クロスプラットフォームに使用される汎用プログラミング言語です。このタグは、ISO 9899標準で定義されているC言語に関する一般的な質問で使用する必要があります(特に指定のない限り、最新バージョン9899:2018。バージョン固有のリクエストには、c89、c99、c11などのタグも付けます)。CはC ++とは異なり、合理的な理由がない限り、C ++タグと組み合わせるべきではありません。

18
Project Eulerとの速度比較:C vs Python vs Erlang vs Haskell
私はProject Eulerからの問題#12をプログラミング演習として使用し、C、Python、Erlang、およびHaskellでの(確かに最適ではない)実装を比較しました。実行時間をいくらか長くするために、最初の問題で述べたように、500ではなく1000を超える除数で最初の三角形の数値を検索します。 結果は次のとおりです。 C: lorenzo@enzo:~/erlang$ gcc -lm -o euler12.bin euler12.c lorenzo@enzo:~/erlang$ time ./euler12.bin 842161320 real 0m11.074s user 0m11.070s sys 0m0.000s Python: lorenzo@enzo:~/erlang$ time ./euler12.py 842161320 real 1m16.632s user 1m16.370s sys 0m0.250s PythonとPyPy: lorenzo@enzo:~/Downloads/pypy-c-jit-43780-b590cf6de419-linux64/bin$ time ./pypy /home/lorenzo/erlang/euler12.py 842161320 real 0m13.082s user 0m13.050s sys 0m0.020s アーラン: lorenzo@enzo:~/erlang$ erlc euler12.erl lorenzo@enzo:~/erlang$ time erl …

19
CとC ++の両方で有効なコードは、各言語でコンパイルしたときに異なる動作を生成できますか?
CとC ++には多くの違いがあり、すべての有効なCコードが有効なC ++コードであるとは限りません。 (「有効」とは、動作が定義された標準コードを意味します。つまり、実装固有/未定義などではありません。) CとC ++の両方で有効なコードが、各言語の標準コンパイラーでコンパイルしたときに異なる動作を生成するシナリオはありますか? それを合理的/有用な比較にするために(私は質問で明らかな抜け穴を見つけようとするのではなく、実際に役立つ何かを学ぼうとしています)、仮定しましょう: プリプロセッサに関連するものはありません(つまり#ifdef __cplusplus、、プラグマなどのハックがないことを意味します) 実装で定義されたものは両方の言語で同じです(たとえば、数値制限など)。 各標準のかなり最近のバージョン(たとえば、C ++ 98およびC90以降)を比較しています。 バージョンが重要な場合は、それぞれのバージョンの動作が異なることを説明してください。
664 c++  c 

4
サイクルあたりの4つのFLOPの理論的な最大値を達成するにはどうすればよいですか?
最新のx86-64 Intel CPUで、サイクルあたり4つの浮動小数点演算(倍精度)の理論上のピークパフォーマンスをどのように達成できますか? 私が理解している限り、最新のIntel CPUのほとんどでSSE が完了addするmulまでに3サイクル、が完了するまでに5サイクルかかります(たとえば、Agner Fogの「Instruction Tables」を参照)。パイプライン化によりadd、アルゴリズムに少なくとも3つの独立した合計がある場合、1サイクルあたり1のスループットが得られます。これは、パックaddpdされたaddsdバージョンとスカラーバージョンおよびSSEレジスターに2を含めることができるため当てはまるためdouble、スループットはサイクルあたり2フロップと同じくらい高くなる可能性があります。 さらに、(これに関する適切なドキュメントを見たことはありませんが)addとmulは並行して実行でき、サイクルあたり4フロップの理論的な最大スループットを実現できます。 ただし、単純なC / C ++プログラムではそのパフォーマンスを再現できませんでした。私の最善の試みは約2.7フロップ/サイクルをもたらしました。ピークパフォーマンスを実証する単純なC / C ++またはアセンブラープログラムを提供できる人がいれば、高く評価されます。 私の試み: #include <stdio.h> #include <stdlib.h> #include <math.h> #include <sys/time.h> double stoptime(void) { struct timeval t; gettimeofday(&t,NULL); return (double) t.tv_sec + t.tv_usec/1000000.0; } double addmul(double add, double mul, int ops){ // Need to initialise differently …

13
Cのsize_tとは何ですか?
size_tCで混乱していsizeofます。オペレーターから返されることはわかっています。しかし、それは正確には何ですか?データ型ですか? forループがあるとしましょう: for(i = 0; i < some_size; i++) int i;または使用する必要がありますかsize_t i;?
626 c  int  size-t 

30
符号なし整数乗算オーバーフローを検出するにはどうすればよいですか?
OverаэтотвопросестьответынаStack Overflowнарусском:МожнолинаязыкахC / C ++определитьцелочисленнееленееленее 私は、すべての解決策を見つけるためにC ++でプログラムを書いていたB = C、、BとCが一緒にすべての桁を使用し0-9回だけを。プログラムは、値の上にループとB、そして、それは上の桁カウントルーチンを毎回走っ、BとBの桁条件が満たされたかどうかを確認します。 しかし、スプリアス溶液を生成することができるbは整数制限をオーバーフロー。私は次のようなコードを使用してこれをチェックすることになりました: unsigned long b, c, c_test; ... c_test=c*b; // Possible overflow if (c_test/b != c) {/* There has been an overflow*/} else c=c_test; // No overflow オーバーフローをテストするより良い方法はありますか?一部のチップにはオーバーフローが発生したときに設定される内部フラグがあることは知っていますが、CまたはC ++を介してアクセスされることはありません。 符号付き intオーバーフローはCおよびC ++では未定義の動作であるため、実際にそれを引き起こさずに検出する必要があることに注意してください。追加前の署名付きintオーバーフローについては、C / C ++での署名付きオーバーフローの検出を参照してください。
618 c++  c  integer-overflow 



9
プロセス内からCPUとメモリの消費量を確認する方法は?
かつて、実行中のアプリケーション内から次のパフォーマンスパラメータを決定するタスクがありました。 利用可能な仮想メモリの合計 現在使用されている仮想メモリ プロセスで現在使用されている仮想メモリ 使用可能な合計RAM 現在使用されているRAM プロセスで現在使用されているRAM 現在使用されているCPUの割合 プロセスで現在使用されているCPUの割合 コードはWindowsとLinuxで実行する必要がありました。これは標準的な作業のようですが、マニュアル(WIN32 API、GNUドキュメント)やインターネットで必要な情報を見つけるのに数日かかりました。そこに見つかりました。 他の人が同じ問題を経験するのを防ぐために、散らばったすべての情報に加えて、試行錯誤によってここで見つけた情報を1か所に収集することをお勧めします。
593 c++  c  memory  cpu 


23
どちらが速いですか:while(1)またはwhile(2)?
これは上級管理職からのインタビューの質問でした。 どちらが速いですか? while(1) { // Some code } または while(2) { //Some code } 内部の式whileは最終的にtrueまたはに評価されるため、どちらも実行速度は同じであると述べましたfalse。この場合、どちらも評価されtrue、while条件内に追加の条件付き命令はありません。したがって、両方の実行速度は同じであり、私は(1)を優先します。 しかし、インタビュアーは自信を持って言った:「あなたの基本を確認してください。while(1)より速いですwhile(2)。」(彼は私の自信をテストしていませんでした) これは本当ですか? 参照:「for(;;)」は「while(TRUE)」より高速ですか?そうでない場合、なぜ人々はそれを使うのですか?


5
「while(!feof(file))」が常に間違っているのはなぜですか?
最近、多くの投稿でこのようなファイルを読み取ろうとしている人を見てきました。 #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { char *path = "stdin"; FILE *fp = argc > 1 ? fopen(path=argv[1], "r") : stdin; if( fp == NULL ) { perror(path); return EXIT_FAILURE; } while( !feof(fp) ) { /* THIS IS WRONG */ /* Read and process data …
573 c  file  while-loop  eof  feof 




弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.