C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
前
C言語なら俺に聞け 146
https://mevius.5ch.net/test/read.cgi/tech/1525031257/
探検
C言語なら俺に聞け 147
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/08/16(木) 23:36:02.22ID:fOCSKLtw793デフォルトの名無しさん
2018/09/07(金) 07:56:45.53ID:ZG8Bsw3G >787
Win7以降で最低4G、可能なら8G。3Dゲームやるなら16G以上。
XP時代は2Gか3Gだった。
Win7以降で最低4G、可能なら8G。3Dゲームやるなら16G以上。
XP時代は2Gか3Gだった。
794デフォルトの名無しさん
2018/09/07(金) 07:57:24.56ID:1SEeRaQU >>787
今使ってるマイコンのRAMは64バイト
今使ってるマイコンのRAMは64バイト
795デフォルトの名無しさん
2018/09/07(金) 08:06:16.22ID:1SEeRaQU メモリを確保しっぱなしでわざわざ明示的に解放コードを書かないことはある
C++じゃなくてCだと特に
組み込みだとそもそも終了処理なんて物が無かったりする
C++じゃなくてCだと特に
組み込みだとそもそも終了処理なんて物が無かったりする
796デフォルトの名無しさん
2018/09/07(金) 08:35:25.77ID:Ge6Y8svS >>792
(俺はそういう状況に遭遇したことがないが、)やるなら、
freeを生かしたまま残し、その直前でexit、
exitに「// free が遅いからここで強制終了」とコメントかな。
そもそもCはやたらfreeするようには出来てない。それはK&Rのfree実装をみても明らかだ。
C++や他GC言語のようにインスタンスを個別にmalloc/freeした方が
プログラミング的に美しく、自由度があるのも確かだが、
古来C流なら
> 個々のデータはプログラム終了まで破棄しない、て条件。
が分かっている時点で纏めてmallocし、内部的に切り出して使う、とかじゃないかな?
大きなテキストを1発mallocで確保し、内部的に改行コードで区切って使うみたいに。
初期データはインミュータブル扱い、追加/変更はインスタンス毎個別に確保、だ。
ただこれだと結局コードは増えてしまうし、個別freeすべきかのフラグを導入するか、
解放関数でインミュータブル領域かどうかを判定する必要がある。
そういうのが面倒だと最初から全部C++流にインスタンス毎個別に確保になり、
その分動作が遅くなるが、コード自体は綺麗に(統一的に)保たれる。
結局、コードを取るか、手間かけてその分高速化するか、でしかない。
気にならない程度なら、俺はC++流の個別確保の方がコードが綺麗だからいいと思うが。
(つまり今の君の実装)
気になるのなら、選択の余地無く高速化するしかないし。
(俺はそういう状況に遭遇したことがないが、)やるなら、
freeを生かしたまま残し、その直前でexit、
exitに「// free が遅いからここで強制終了」とコメントかな。
そもそもCはやたらfreeするようには出来てない。それはK&Rのfree実装をみても明らかだ。
C++や他GC言語のようにインスタンスを個別にmalloc/freeした方が
プログラミング的に美しく、自由度があるのも確かだが、
古来C流なら
> 個々のデータはプログラム終了まで破棄しない、て条件。
が分かっている時点で纏めてmallocし、内部的に切り出して使う、とかじゃないかな?
大きなテキストを1発mallocで確保し、内部的に改行コードで区切って使うみたいに。
初期データはインミュータブル扱い、追加/変更はインスタンス毎個別に確保、だ。
ただこれだと結局コードは増えてしまうし、個別freeすべきかのフラグを導入するか、
解放関数でインミュータブル領域かどうかを判定する必要がある。
そういうのが面倒だと最初から全部C++流にインスタンス毎個別に確保になり、
その分動作が遅くなるが、コード自体は綺麗に(統一的に)保たれる。
結局、コードを取るか、手間かけてその分高速化するか、でしかない。
気にならない程度なら、俺はC++流の個別確保の方がコードが綺麗だからいいと思うが。
(つまり今の君の実装)
気になるのなら、選択の余地無く高速化するしかないし。
797デフォルトの名無しさん
2018/09/07(金) 08:38:20.43ID:oKo9UKIA >>795
むしろ C++ の方が気安く new するから、そっちの方が放置したくならないかね。
根っこのオブジェクトを delete すれば後のはデストラクタがやってくれるとかで面倒さは少ないのかもしれないが。
何にしても、許されるのはきちんと解放できるけどあえてしない、ってのだけだな。
なんだかよく分かんないし面倒からOSに尻拭いしてもらうなんてのはダメだ。
fork で起こした子プロセスがメモリを free せず終了しても問題無いが、それをスレッドにしましょうなんてなった瞬間に破綻する。
むしろ C++ の方が気安く new するから、そっちの方が放置したくならないかね。
根っこのオブジェクトを delete すれば後のはデストラクタがやってくれるとかで面倒さは少ないのかもしれないが。
何にしても、許されるのはきちんと解放できるけどあえてしない、ってのだけだな。
なんだかよく分かんないし面倒からOSに尻拭いしてもらうなんてのはダメだ。
fork で起こした子プロセスがメモリを free せず終了しても問題無いが、それをスレッドにしましょうなんてなった瞬間に破綻する。
798デフォルトの名無しさん
2018/09/07(金) 09:28:39.55ID:8HJNQC7B 商業プログラムだとラッパだらけで直接free呼ばんし。
freeなしという選択肢は常に確保しとけばよい。
freeなしという選択肢は常に確保しとけばよい。
799デフォルトの名無しさん
2018/09/07(金) 11:25:43.88ID:/+XJI6DP >>786
え、WindowsにSystem z版てあるんだっけ?
え、WindowsにSystem z版てあるんだっけ?
800デフォルトの名無しさん
2018/09/07(金) 12:12:28.24ID:veel+fh4 >>799
え?System z限定の話だったの?
え?System z限定の話だったの?
801デフォルトの名無しさん
2018/09/07(金) 12:18:34.93ID:/+XJI6DP >>800
だってSVCって。。。
だってSVCって。。。
802デフォルトの名無しさん
2018/09/07(金) 12:28:11.67ID:veel+fh4803デフォルトの名無しさん
2018/09/07(金) 12:36:08.16ID:H0y7xQ1z >>781
mmap経由ならOSによってはそうかもな
mmap経由ならOSによってはそうかもな
804デフォルトの名無しさん
2018/09/07(金) 12:51:04.62ID:/+XJI6DP >>802
おk
じゃあ、その前提で話を戻そう
freeはISO/IEC9899では宣言と引数の意味のみが規定され実装は未規定だ
782でああ言ったのは、freeする度毎にタイムスライスを放棄するような実装は
まずなかろうということだ
おk
じゃあ、その前提で話を戻そう
freeはISO/IEC9899では宣言と引数の意味のみが規定され実装は未規定だ
782でああ言ったのは、freeする度毎にタイムスライスを放棄するような実装は
まずなかろうということだ
805デフォルトの名無しさん
2018/09/07(金) 14:34:23.02ID:lg5TGvmQ >>804
まず、786で書いたようにあくまで「思ってた」だけで確固たる根拠はないことを前提に。
freeするならどこからか借りていたメモリ領域を返却するわけで、仮想メモリ返却にはMMUを使ったページ管理が必要だよね?
仮想メモリページ管理はメモリマネージャー的なカーネルモードドライバが必要なはずで、つまり解放時にはシステムコールを伴う。
ただ、HeapFree時に直接カーネルモードで解放が実行されずメモリマネージャがガーベジコレクション的に後々回収するなら、あなたの言うとおりfree時にユーザーモードで閉じて処理されるかも。
このへん、Linuxとかどういう実装になってるんだろうね?
まず、786で書いたようにあくまで「思ってた」だけで確固たる根拠はないことを前提に。
freeするならどこからか借りていたメモリ領域を返却するわけで、仮想メモリ返却にはMMUを使ったページ管理が必要だよね?
仮想メモリページ管理はメモリマネージャー的なカーネルモードドライバが必要なはずで、つまり解放時にはシステムコールを伴う。
ただ、HeapFree時に直接カーネルモードで解放が実行されずメモリマネージャがガーベジコレクション的に後々回収するなら、あなたの言うとおりfree時にユーザーモードで閉じて処理されるかも。
このへん、Linuxとかどういう実装になってるんだろうね?
806デフォルトの名無しさん
2018/09/07(金) 14:55:15.04ID:Yr/2DouQ 画期的なメモリ確保方式とか出来ないかな
例えばさ、名前付きタグを付けてメモリ確保し、
名前指定で一気に解放できるようにするとか
例えばさ、名前付きタグを付けてメモリ確保し、
名前指定で一気に解放できるようにするとか
807デフォルトの名無しさん
2018/09/07(金) 15:22:58.08ID:OFkeqRjw Rust?
808デフォルトの名無しさん
2018/09/07(金) 15:56:06.95ID:/+XJI6DP >>805
freeがメモリを返却する相手が何者なのかは未規定だぞ
いちいちOSへ直に返しているとおまえさんの言うとおりだが
スタティックリンクライブラリがOSから大口で借りたメモリを切り売りする
スタイルならシステムコールの回数をガクンと減らせる
よくある実装は1MiBあたりを境に小容量は切り売りで大容量は直にという形
freeがメモリを返却する相手が何者なのかは未規定だぞ
いちいちOSへ直に返しているとおまえさんの言うとおりだが
スタティックリンクライブラリがOSから大口で借りたメモリを切り売りする
スタイルならシステムコールの回数をガクンと減らせる
よくある実装は1MiBあたりを境に小容量は切り売りで大容量は直にという形
809デフォルトの名無しさん
2018/09/07(金) 16:07:14.96ID:lg5TGvmQ >>808
いや、俺はANSI Cとかの規定の話してるんじゃなくて、SVCって単語からこの議論がスタートしてるのでモダンなOS上の一般的な実装の話をしてると思ってたんだけど、違ったのか。
確かにアプリ起動時にある程度のヒープを最初から用意ってのはありそう。
いや、俺はANSI Cとかの規定の話してるんじゃなくて、SVCって単語からこの議論がスタートしてるのでモダンなOS上の一般的な実装の話をしてると思ってたんだけど、違ったのか。
確かにアプリ起動時にある程度のヒープを最初から用意ってのはありそう。
810デフォルトの名無しさん
2018/09/07(金) 16:15:46.30ID:lg5TGvmQ811デフォルトの名無しさん
2018/09/07(金) 17:07:55.49ID:+cI6iexZ >>805
Linux+glibcの環境なら、mallocは昔ながらのbrkシステムコールの方法と
mmapシステムコールの方法が状況に応じて使われる
freeしたときmmapをmunmapしてOSに返されることもある
はず。…たしか
Linux+glibcの環境なら、mallocは昔ながらのbrkシステムコールの方法と
mmapシステムコールの方法が状況に応じて使われる
freeしたときmmapをmunmapしてOSに返されることもある
はず。…たしか
812デフォルトの名無しさん
2018/09/07(金) 18:11:36.24ID:lg5TGvmQ813デフォルトの名無しさん
2018/09/07(金) 20:33:47.92ID:lg5TGvmQ ちらっとmmapとglibc斜め読みしてみた。
こんな世界があるんだとソフトエンジニア7年目にして新しい視点が開眼しそう。
色々気付きをくれた方々、ありがとうございました。
こんな世界があるんだとソフトエンジニア7年目にして新しい視点が開眼しそう。
色々気付きをくれた方々、ありがとうございました。
814デフォルトの名無しさん
2018/09/07(金) 23:08:07.85ID:Ge6Y8svS >>806
ゆとりりゅうのすごいめもりかくほ、まで読んだ。
マジレスすると、
> 名前付きタグ
このコストが分からない馬鹿はCを学ぶ意味はあるだろう。
スクリプト言語しか使ったことのない奴に多いが。(例:ハッシュはタダだと思ってる)
>>805
> 仮想メモリ返却にはMMUを使ったページ管理が必要だよね?
お前は中途半端に勉強してるな。まあ悪いことではないが。
ページの単位は今も昔も4KBだ。その方法ではインスタンス毎の確保は出来ないと分かるだろ。
>>812-813
読むのは勝手だが、あまり関係ないところに深入りしても意味はないぞ。
7年目なら業務関連は一通り出来るようになっており、知識を横に広げているのかもしれないが、
OS関連の知識があってもな。
時間が有り余っていて手当たり次第に知識を吸収するのも一つの手だが、
もし大きい(10,000行以上)のを書いたことがないのなら、
まずは規模の限界(複雑さの限界)に挑戦する方がいいと思うが。
ゆとりりゅうのすごいめもりかくほ、まで読んだ。
マジレスすると、
> 名前付きタグ
このコストが分からない馬鹿はCを学ぶ意味はあるだろう。
スクリプト言語しか使ったことのない奴に多いが。(例:ハッシュはタダだと思ってる)
>>805
> 仮想メモリ返却にはMMUを使ったページ管理が必要だよね?
お前は中途半端に勉強してるな。まあ悪いことではないが。
ページの単位は今も昔も4KBだ。その方法ではインスタンス毎の確保は出来ないと分かるだろ。
>>812-813
読むのは勝手だが、あまり関係ないところに深入りしても意味はないぞ。
7年目なら業務関連は一通り出来るようになっており、知識を横に広げているのかもしれないが、
OS関連の知識があってもな。
時間が有り余っていて手当たり次第に知識を吸収するのも一つの手だが、
もし大きい(10,000行以上)のを書いたことがないのなら、
まずは規模の限界(複雑さの限界)に挑戦する方がいいと思うが。
>>814
>もし大きい(10,000行以上)のを書いたことがないのなら、まずは規模の限界(複雑さの限界)に挑戦する方がいいと思うが。
そうですね…
1万行ですか…
せいぜい 1000 行程度までしかやったことがありません、モチベーションが続かない・燃料切れ、という感じです
>もし大きい(10,000行以上)のを書いたことがないのなら、まずは規模の限界(複雑さの限界)に挑戦する方がいいと思うが。
そうですね…
1万行ですか…
せいぜい 1000 行程度までしかやったことがありません、モチベーションが続かない・燃料切れ、という感じです
816デフォルトの名無しさん
2018/09/08(土) 00:12:07.00ID:kEOPIOXH 行数が多ければいいというものでもないと思うが・・・
817デフォルトの名無しさん
2018/09/08(土) 00:16:36.09ID:L3ZkEci+ だいぶ初歩の質問なんだけどextern宣言って本当に必須なの?コンパイラというかリンカによるのかもしれないけど、つけなくても同じ動作するよね?
今まで疑問に思わず書いてたけど、これを聞かれて色々試してみると実際つけなくても同様の動きしてるように見えるし、ちゃんと答えられなかったわ
今まで疑問に思わず書いてたけど、これを聞かれて色々試してみると実際つけなくても同様の動きしてるように見えるし、ちゃんと答えられなかったわ
818デフォルトの名無しさん
2018/09/08(土) 00:16:57.63ID:Bduckbke >>816
ならお前なりの妥当な規模を測る単位でも示せよ
ならお前なりの妥当な規模を測る単位でも示せよ
819デフォルトの名無しさん
2018/09/08(土) 00:24:37.23ID:cJyrgWby >>816
否定ばかりして新しい提案をしない典型的無能要員
否定ばかりして新しい提案をしない典型的無能要員
>>817
ライブラリ関数をコールするだけなら extern は要らない子です、でもライブラリが独自の変数を定義して公開しているのならば extern がないと困ります
例えば <stdio.h> の stdin, stdout, stderr
ライブラリ関数をコールするだけなら extern は要らない子です、でもライブラリが独自の変数を定義して公開しているのならば extern がないと困ります
例えば <stdio.h> の stdin, stdout, stderr
821デフォルトの名無しさん
2018/09/08(土) 01:03:55.35ID:Bduckbke >>817
> 1. Declaration can be done any number of times but definition only once.
> 2. “extern” keyword is used to extend the visibility of variables/functions().
> 3. Since functions are visible through out the program by default. The use of extern is not needed in function declaration/definition. Its use is redundant.
> 4. When extern is used with a variable, it’s only declared not defined.
> 5. As an exception, when an extern variable is declared with initialization, it is taken as definition of the variable as well.
> https://www.geeksforgeeks.org/understanding-extern-keyword-in-c/
下のコード例が見やすい。
これが規格と合致しているのかは知らん。
> 1. Declaration can be done any number of times but definition only once.
> 2. “extern” keyword is used to extend the visibility of variables/functions().
> 3. Since functions are visible through out the program by default. The use of extern is not needed in function declaration/definition. Its use is redundant.
> 4. When extern is used with a variable, it’s only declared not defined.
> 5. As an exception, when an extern variable is declared with initialization, it is taken as definition of the variable as well.
> https://www.geeksforgeeks.org/understanding-extern-keyword-in-c/
下のコード例が見やすい。
これが規格と合致しているのかは知らん。
>>821
しかし C には仮定義 "tentative definition" があったりして混迷するのです
ISO/IEC 9899:1999 6.9.2.2
the behavior is exactly as if the translation unit contains a file scope declaration of that
identifier, with the composite type as of the end of the translation unit, with an initializer
equal to 0.
私には、これはリンカの仕業であってコンパイラが自ら行動しているようには見えないのですが…
しかし C には仮定義 "tentative definition" があったりして混迷するのです
ISO/IEC 9899:1999 6.9.2.2
the behavior is exactly as if the translation unit contains a file scope declaration of that
identifier, with the composite type as of the end of the translation unit, with an initializer
equal to 0.
私には、これはリンカの仕業であってコンパイラが自ら行動しているようには見えないのですが…
823デフォルトの名無しさん
2018/09/08(土) 04:02:52.50ID:5gcJr6RX glibc は malloc だけで 5000行あるってね。
上級者スレに解説動画があったけど面白かったよ。
上級者スレに解説動画があったけど面白かったよ。
824デフォルトの名無しさん
2018/09/08(土) 09:36:45.93ID:gGqp1fFu >>814
>ページの単位は今も昔も4KBだ。その方法ではインスタンス毎の確保は出来ないと分かるだろ。
ごめん、これがよく分かんない。
MMUのページ単位が4KBなのと、インスタンス毎の確保はできないってのがつながらない。
てかここで言うインスタンスって何?
>ページの単位は今も昔も4KBだ。その方法ではインスタンス毎の確保は出来ないと分かるだろ。
ごめん、これがよく分かんない。
MMUのページ単位が4KBなのと、インスタンス毎の確保はできないってのがつながらない。
てかここで言うインスタンスって何?
825デフォルトの名無しさん
2018/09/08(土) 09:55:06.11ID:+lRq1NsW >>824
インスタンス1つにいちいち4KBもアロケートするのかって話だろ
インスタンス1つにいちいち4KBもアロケートするのかって話だろ
826デフォルトの名無しさん
2018/09/08(土) 10:01:56.96ID:gGqp1fFu >>825
別に1回のmallocで必ずしも毎回4KBのベージを割り当てる必要ないのでは?
mallocするのが小さいサイズなら確保済みの4KBの空いてるとこから割り当てれば良いし。
実際にはどういう実装になってるか知らんけど。
別に1回のmallocで必ずしも毎回4KBのベージを割り当てる必要ないのでは?
mallocするのが小さいサイズなら確保済みの4KBの空いてるとこから割り当てれば良いし。
実際にはどういう実装になってるか知らんけど。
827デフォルトの名無しさん
2018/09/08(土) 10:10:27.96ID:3yA/EH7F そもそも動的メモリ確保/解放と仮想メモリ管理は直接関係ない話
組み込みだとMMUなんて存在しない環境もある
組み込みだとMMUなんて存在しない環境もある
828デフォルトの名無しさん
2018/09/08(土) 10:12:51.74ID:Bduckbke >>826
それだとお前のレス
> freeするならどこからか借りていたメモリ領域を返却するわけで、仮想メモリ返却にはMMUを使ったページ管理が必要だよね?
> 仮想メモリページ管理はメモリマネージャー的なカーネルモードドライバが必要なはずで、つまり解放時にはシステムコールを伴う。
と矛盾するだろ。
お前は日本語が駄目なタイプか?
それだとお前のレス
> freeするならどこからか借りていたメモリ領域を返却するわけで、仮想メモリ返却にはMMUを使ったページ管理が必要だよね?
> 仮想メモリページ管理はメモリマネージャー的なカーネルモードドライバが必要なはずで、つまり解放時にはシステムコールを伴う。
と矛盾するだろ。
お前は日本語が駄目なタイプか?
829デフォルトの名無しさん
2018/09/08(土) 10:15:40.02ID:gGqp1fFu830デフォルトの名無しさん
2018/09/08(土) 10:25:31.57ID:+lRq1NsW831デフォルトの名無しさん
2018/09/08(土) 10:29:17.43ID:Bduckbke >>829
ぷろぐらみんぐのまえににほんごをがんばれ
ぷろぐらみんぐのまえににほんごをがんばれ
832デフォルトの名無しさん
2018/09/08(土) 10:29:54.08ID:gGqp1fFu 業務に関係なく完全に知的好奇心からのmalloc実装の想像だったので、やっぱりglibc読んでみよう。
色々レスくれた人、ありがとう。
色々レスくれた人、ありがとう。
833デフォルトの名無しさん
2018/09/08(土) 10:38:55.04ID:LzkjeqyB ファイルシステムの管理領域が大きくなりすぎて、
4KB以下のページサイズには出来ない
4MBで千個、4GBで百万個のページを管理しないといけないから、
管理領域だけでも、100MB以上になる
だから、ページサイズをもっと大きい、2MBにすると、
2GBで千個、2TBで百万個のページを管理できるから、今のHDD の容量に対応できる
4KB以下のページサイズには出来ない
4MBで千個、4GBで百万個のページを管理しないといけないから、
管理領域だけでも、100MB以上になる
だから、ページサイズをもっと大きい、2MBにすると、
2GBで千個、2TBで百万個のページを管理できるから、今のHDD の容量に対応できる
834デフォルトの名無しさん
2018/09/08(土) 10:43:05.81ID:+lRq1NsW HDDだとシリンダ容量との親和性を考えないとね
だけどSSDが普及してる今どきの事情だとどうなんだろう
だけどSSDが普及してる今どきの事情だとどうなんだろう
835デフォルトの名無しさん
2018/09/08(土) 10:55:59.74ID:AeS6DVc8836デフォルトの名無しさん
2018/09/08(土) 10:58:20.45ID:cJyrgWby 一領域当たり100byte
837デフォルトの名無しさん
2018/09/08(土) 11:02:40.38ID:AeS6DVc8838デフォルトの名無しさん
2018/09/08(土) 11:31:35.27ID:Bduckbke >>833
つHugePage
つHugePage
839デフォルトの名無しさん
2018/09/08(土) 16:08:33.18ID:u7HqPj1f utf8procというUnicodeライブラリを使いたいのですが、C99に準拠してるかどうかって分かりますか?
「emulate C99 bool」というコメントがソースコードにあったのでおそらくC89あたりからサポートしていると思うんですが。
https://github.com/JuliaStrings/utf8proc
「emulate C99 bool」というコメントがソースコードにあったのでおそらくC89あたりからサポートしていると思うんですが。
https://github.com/JuliaStrings/utf8proc
840デフォルトの名無しさん
2018/09/08(土) 17:17:58.22ID:AMMRWQYD >>839
C99に準拠している
そのコメントの少し前に
「MSVC prior to 2013 lacked stdbool.h and inttypes.h」ってコメントがあるからWindowsの古い環境のためにboolとかを定義しているだけだね
C99に準拠している
そのコメントの少し前に
「MSVC prior to 2013 lacked stdbool.h and inttypes.h」ってコメントがあるからWindowsの古い環境のためにboolとかを定義しているだけだね
841デフォルトの名無しさん
2018/09/08(土) 18:36:43.66ID:LzkjeqyB OSのすべての機能を学びたいなら、ムック本の
Linuxエンジニア養成読本、第3版、2016
カーネル、起動処理、仮想記憶、
ファイルシステム、シェルスクリプトなど
ファイルシステム・管理領域の仕組みなどを読んで
Linuxエンジニア養成読本、第3版、2016
カーネル、起動処理、仮想記憶、
ファイルシステム、シェルスクリプトなど
ファイルシステム・管理領域の仕組みなどを読んで
842デフォルトの名無しさん
2018/09/08(土) 18:44:21.19ID:+lRq1NsW タネンバウム先生の本でしょ
すごい弟子を育てた伝説の師匠
すごい弟子を育てた伝説の師匠
843デフォルトの名無しさん
2018/09/08(土) 18:49:46.85ID:kiLcyFGE なにそれ、すごい面白そう!
アラサーだけどまだまだ青二才だしとっても勉強になります!
アラサーだけどまだまだ青二才だしとっても勉強になります!
844デフォルトの名無しさん
2018/09/08(土) 19:31:07.27ID:AeS6DVc8845デフォルトの名無しさん
2018/09/09(日) 05:27:49.39ID:pVz5FNGY846デフォルトの名無しさん
2018/09/09(日) 14:54:16.40ID:/XE3HNn6 ここのスレの人はValgrindは
使っているんだろうか。
メモリリークとか考えれば
ぜひ使うべきツールだと思う。
https://qiita.com/tjun/items/e9d2f7da3c94eb0240d8
使っているんだろうか。
メモリリークとか考えれば
ぜひ使うべきツールだと思う。
https://qiita.com/tjun/items/e9d2f7da3c94eb0240d8
847デフォルトの名無しさん
2018/09/09(日) 15:31:42.46ID:pIlBTOwT 便利だよね
ただ役に立ってるときはクソコードを触ってるときでもあると思う
ただ役に立ってるときはクソコードを触ってるときでもあると思う
848デフォルトの名無しさん
2018/09/09(日) 15:44:39.72ID:DwszjCT1 変数中の "1" のビット数を数える効率的方法ありますか?
aが32ビットとして
for (i = 0; i < 32; i++) {
j = j + a & 1;
a = a >> 1;
}
みたいに1ビットずつカウントするしかないでしょうか
あるいは、8bitとかで区切ってテーブルを引いて加算とかでしょうか(16ビットや32ビットのテーブルは現実的でないので)
aが32ビットとして
for (i = 0; i < 32; i++) {
j = j + a & 1;
a = a >> 1;
}
みたいに1ビットずつカウントするしかないでしょうか
あるいは、8bitとかで区切ってテーブルを引いて加算とかでしょうか(16ビットや32ビットのテーブルは現実的でないので)
849デフォルトの名無しさん
2018/09/09(日) 15:50:52.78ID:V1LakR3i850デフォルトの名無しさん
2018/09/09(日) 15:53:41.89ID:V1LakR3i a = (a & 0x55555555) + (a >> 1 & 0x55555555);
a = (a & 0x33333333) + (a >> 2 & 0x33333333);
a = (a & 0x0F0F0F0F) + (a >> 4 & 0x0F0F0F0F);
a = (a & 0x00FF00FF) + (a >> 8 & 0x00FF00FF);
a = (a & 0x0000FFFF) + (a >> 16 & 0x0000FFFF);
a = (a & 0x33333333) + (a >> 2 & 0x33333333);
a = (a & 0x0F0F0F0F) + (a >> 4 & 0x0F0F0F0F);
a = (a & 0x00FF00FF) + (a >> 8 & 0x00FF00FF);
a = (a & 0x0000FFFF) + (a >> 16 & 0x0000FFFF);
851デフォルトの名無しさん
2018/09/09(日) 16:07:17.49ID:TAQT5wBe 32ビットだしその書き方良くないと思います
852デフォルトの名無しさん
2018/09/09(日) 16:54:40.77ID:V1LakR3i https://ideone.com/FGqs1S
なにも問題ない
レスをコピペで普通に動く
アホがいちいち車輪の再発明するよりとりあえず↓コレ使っとけば間違いない
http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
Built-in Function: int __builtin_popcount (unsigned int x)
Returns the number of 1-bits in x.
Built-in Function: int __builtin_popcountl (unsigned long)
Similar to __builtin_popcount, except the argument type is unsigned long.
Built-in Function: int __builtin_parityll (unsigned long long)
Similar to __builtin_parity, except the argument type is unsigned long long.
なにも問題ない
レスをコピペで普通に動く
アホがいちいち車輪の再発明するよりとりあえず↓コレ使っとけば間違いない
http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
Built-in Function: int __builtin_popcount (unsigned int x)
Returns the number of 1-bits in x.
Built-in Function: int __builtin_popcountl (unsigned long)
Similar to __builtin_popcount, except the argument type is unsigned long.
Built-in Function: int __builtin_parityll (unsigned long long)
Similar to __builtin_parity, except the argument type is unsigned long long.
853デフォルトの名無しさん
2018/09/09(日) 17:39:09.00ID:/XE3HNn6854デフォルトの名無しさん
2018/09/09(日) 17:57:06.08ID:2r/FT+Vi >>850
うまいやり方だなぁ
うまいやり方だなぁ
855デフォルトの名無しさん
2018/09/09(日) 17:57:22.00ID:lGJ+2GvF856デフォルトの名無しさん
2018/09/09(日) 18:06:01.01ID:2r/FT+Vi >>850
少なくとも最後の行だけは
a = (a + (a >> 16)) & 0x0000FFFF;
の方がよさそう。
正確には最大 32 にしかならないから & 0x0000001F でもよさそうだし、値の上限を考えながらだと途中の行ももう少し演算を減らせたりするかも?
少なくとも最後の行だけは
a = (a + (a >> 16)) & 0x0000FFFF;
の方がよさそう。
正確には最大 32 にしかならないから & 0x0000001F でもよさそうだし、値の上限を考えながらだと途中の行ももう少し演算を減らせたりするかも?
857デフォルトの名無しさん
2018/09/09(日) 18:06:59.52ID:2r/FT+Vi >>856
0x0000003F だったw
0x0000003F だったw
858デフォルトの名無しさん
2018/09/09(日) 20:35:00.38ID:2r/FT+Vi >>850
a = (a & 0x55555555) + (a >> 1 & 0x55555555);
a = (a & 0x33333333) + (a >> 2 & 0x33333333);
a = (a + (a >> 4)) & 0x0F0F0F0F0F;
a += a >> 8;
a = (a + (a >> 16)) & 0x3F;
でも同じ結果が得られた。
最適化無しだと 9% くらい速くなった。
a = (a & 0x55555555) + (a >> 1 & 0x55555555);
a = (a & 0x33333333) + (a >> 2 & 0x33333333);
a = (a + (a >> 4)) & 0x0F0F0F0F0F;
a += a >> 8;
a = (a + (a >> 16)) & 0x3F;
でも同じ結果が得られた。
最適化無しだと 9% くらい速くなった。
859デフォルトの名無しさん
2018/09/09(日) 20:36:22.47ID:2r/FT+Vi860デフォルトの名無しさん
2018/09/09(日) 21:00:45.14ID:4c2hO8gX しね
861デフォルトの名無しさん
2018/09/09(日) 21:13:17.93ID:2r/FT+Vi a = (a & 0x55555555) + (a >> 1 & 0x55555555);
a = (a & 0x33333333) + (a >> 2 & 0x33333333);
a = (a + (a >> 4)) & 0x0F0F0F0F;
a = (a * 0x101 * 0x10001) >> 24;
にしたら >>850 より 24% 速くなった(pentiumM linux)。
でも gcc の速度最適化を入れるとどれも変わらないね。
a = (a & 0x33333333) + (a >> 2 & 0x33333333);
a = (a + (a >> 4)) & 0x0F0F0F0F;
a = (a * 0x101 * 0x10001) >> 24;
にしたら >>850 より 24% 速くなった(pentiumM linux)。
でも gcc の速度最適化を入れるとどれも変わらないね。
862デフォルトの名無しさん
2018/09/09(日) 21:19:41.88ID:4c2hO8gX なに1人ではしゃいでんのこいつ。
863デフォルトの名無しさん
2018/09/09(日) 21:28:41.02ID:Vmegj8Hy CPUにそういう命令なかったっけ?
使うところでは割と使いそうだけど
使うところでは割と使いそうだけど
864デフォルトの名無しさん
2018/09/09(日) 21:45:09.16ID:5vkdTLeD865デフォルトの名無しさん
2018/09/09(日) 21:54:33.81ID:nMOWxsiw ああ、SSEにpopcntがあるね
866デフォルトの名無しさん
2018/09/09(日) 22:32:42.62ID:hCV1tk8e ポックント
867デフォルトの名無しさん
2018/09/10(月) 02:37:34.95ID:hUyLWeb6 ビットを数える・探すアルゴリズム
http://www.nminoru.jp/~nminoru/programming/bitcount.html
http://www.nminoru.jp/~nminoru/programming/bitcount.html
868デフォルトの名無しさん
2018/09/10(月) 10:36:25.17ID:o5mvkory ビット数の数えあげが欲しくなるのってパリティチェックで末尾付加したりするとき?
869デフォルトの名無しさん
2018/09/10(月) 10:44:53.73ID:cl7nWcjG ソケットみたいにフラグをビット管理してるときとかもほしくなるかな
870デフォルトの名無しさん
2018/09/10(月) 10:56:31.39ID:ddUFIgl6 符号とか暗号とかの世界ではしょっちゅう使うよ。
1の数で最適なアルゴリズムが変わるってケースもあるし、
暗号にサイドチャネル攻撃仕掛けるにはハミング距離とか重要。
1の数で最適なアルゴリズムが変わるってケースもあるし、
暗号にサイドチャネル攻撃仕掛けるにはハミング距離とか重要。
871デフォルトの名無しさん
2018/09/10(月) 11:27:01.59ID:o5mvkory872デフォルトの名無しさん
2018/09/10(月) 11:51:19.73ID:kNISuHie フラグは数えねえよな
性能重視でもなければビットフィールド使って読みやすくして欲しいわ
性能重視でもなければビットフィールド使って読みやすくして欲しいわ
873デフォルトの名無しさん
2018/09/10(月) 11:54:23.84ID:iqhXZjjt バラで書くから読みにくいのであって
関数にしておけば外から見た仕様は変わらない
関数にしておけば外から見た仕様は変わらない
874デフォルトの名無しさん
2018/09/10(月) 12:16:32.03ID:/R6yufrK 普通の通信でエラー検出以外の目的でビット数を数える必要性がわからない。
そんな特定のCPU以外は必ず無駄な計算が必要になる方式をなぜ使う?
そんな特定のCPU以外は必ず無駄な計算が必要になる方式をなぜ使う?
875デフォルトの名無しさん
2018/09/10(月) 12:46:33.22ID:x2RTnFiS >>874
エラー検出、訂正目的以外の通信のためにビットの数え上げするって誰かレスしてたっけ?
エラー検出、訂正目的以外の通信のためにビットの数え上げするって誰かレスしてたっけ?
877デフォルトの名無しさん
2018/09/10(月) 19:25:38.98ID:YAHzQjjo878デフォルトの名無しさん
2018/09/10(月) 19:32:05.94ID:WVFJrP31 Common Lisp にビットを数える関数があるけどcでも同様のものがあったようなゔ
879デフォルトの名無しさん
2018/09/10(月) 20:00:47.59ID:pZnz0RBT int a=0;
printf("%p" ,a);
printf("%p",&a);
同じアドレスが表示されると思っていたのですが、上下で違う数字が出力されました。
アドレスを表示するのはどちらが正しいのでしょうか?
よろしくお願いします。
printf("%p" ,a);
printf("%p",&a);
同じアドレスが表示されると思っていたのですが、上下で違う数字が出力されました。
アドレスを表示するのはどちらが正しいのでしょうか?
よろしくお願いします。
880さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/09/10(月) 20:06:35.73ID:NJC2soWX 下。
881デフォルトの名無しさん
2018/09/10(月) 20:07:47.31ID:WGo2tHWR882デフォルトの名無しさん
2018/09/10(月) 20:26:02.04ID:6MAzJtEj %p は ポインタを要求しているが
ポインタのサイズと intのサイズが違ってたら 鼻から悪魔
ポインタのサイズと intのサイズが違ってたら 鼻から悪魔
883デフォルトの名無しさん
2018/09/10(月) 20:28:01.62ID:pZnz0RBT884デフォルトの名無しさん
2018/09/10(月) 20:29:18.90ID:WGo2tHWR 天文学的な値が出るかも知れんね
885デフォルトの名無しさん
2018/09/10(月) 20:30:01.84ID:WGo2tHWR >>883
そうそう。そういうこと。
そうそう。そういうこと。
886デフォルトの名無しさん
2018/09/10(月) 20:43:33.30ID:l5sdNefZ887デフォルトの名無しさん
2018/09/10(月) 21:01:01.97ID:XzQQxj6r https://ideone.com/bsjclG
また、低学歴知恵遅れのクルクルパーがウソ書いてるわ。。。
64bitのアドレス空間を持ってて、intのサイズが32bitならちゃんと動くワケがないからな
また、低学歴知恵遅れのクルクルパーがウソ書いてるわ。。。
64bitのアドレス空間を持ってて、intのサイズが32bitならちゃんと動くワケがないからな
888デフォルトの名無しさん
2018/09/10(月) 21:07:42.09ID:XxqHEWUO >>887
どの書き込みに対してのレス?
どの書き込みに対してのレス?
889デフォルトの名無しさん
2018/09/10(月) 21:11:41.72ID:7zqNUn7X >>887
これまたチンケな知識でマウント取りに来たな w
これまたチンケな知識でマウント取りに来たな w
890デフォルトの名無しさん
2018/09/10(月) 21:12:59.71ID:XzQQxj6r ID:WGo2tHWR ← コイツにきまってんだろ
なあにが
そうそう。そういうこと。
だ
なにも知らないムクなヤツ相手に
低学歴知恵遅れの分際でテキトーなことばっかり書き込んでる
なあにが
そうそう。そういうこと。
だ
なにも知らないムクなヤツ相手に
低学歴知恵遅れの分際でテキトーなことばっかり書き込んでる
891デフォルトの名無しさん
2018/09/10(月) 21:16:56.02ID:XxqHEWUO ん?これのこと?
> printf() に a の内容である 0 を渡している
> printf() に a の内容である 0 を渡している
892デフォルトの名無しさん
2018/09/10(月) 21:19:04.26ID:6SoA/END こんなにでかい釣り針だと
鯨が釣れるかも
鯨が釣れるかも
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★4 [七波羅探題★]
- 【地震速報】青森県で震度6強 沿岸部に津波警報 ★6 [ぐれ★]
- 「日の丸にバツ印」掲げた大学生 あいまいな国旗損壊罪に「怖い」 The Mainichi [少考さん★]
- 【サッカー】驚異の42得点0失点 中国を怒涛の5連勝に導いた日本人指揮官がまさかの退任か。協会対応に国民激怒 [征夷大将軍★]
- 【テレビ】25年ぶり復活「炎のチャレンジャー」南原清隆&菊池風磨がMC 懐かし「電流イライラ棒」も [湛然★]
- 【音楽】BARBEE BOYS・KONTAが事故で四肢麻痺を公表、新体制で活動は継続 [少考さん★]
- 【画像】童貞は絶ッッッ対"4"を選ぶバレー部J Kが寮でパンパンの集合写真見つけちゃったwwwwwwwwwwwwww [904880432]
- ( ・᷄ὢ・᷅ )あ?
- ブタをぶったたく
- こんな自転車乗ってたやつがいたら?
- 高校球児が大相撲入り。悪そうな顔しとるw [737440712]
- キムタク主演のドラマに山下の曲つければ爆売れ間違いなしだよな
