C言語なら俺に聞け 147at TECH
C言語なら俺に聞け 147 - 暇つぶし2ch769:デフォルトの名無しさん
18/09/06 11:35:05.98 BRF//rri.net
いや教育というか、上司が作ったAPIを利用して機能作れって指示が出ててですね
そのAPIが上で説明したように変数解放しないままプログラム終了してたって状況です
んでこれいいんですかこうすれば治りますがみたいなこと言ったらいいんだ勝手に解放されるかと
ともあれそういう方針が有りだということは分かりました。どうもです

770:デフォルトの名無しさん
18/09/06 11:39:51.63 2H4On29+.net
上司を教育してやりたいなw

771:デフォルトの名無しさん
18/09/06 11:42:26.02 b42HI45e.net
ここに呼んできて

772:デフォルトの名無しさん
18/09/06 11:55:09.68 MYy5/YOc.net
>>753
プロセス終了するなら、無駄です。

773:デフォルトの名無しさん
18/09/06 12:07:29.83 NrF/VtsZ.net
そのAPIを流用するのは難しいな。
しないつもりなのかも知れないが。
まあしかしできればメモリリークしない方が良いな。
そのままだと常駐するプログラムのループの中で使えないし。

774:デフォルトの名無しさん
18/09/06 12:44:35.90 5MBNHP4w.net
>>757
上司の指示ならそのままにしとけばいい
メモリーリークしてもプロセス終了で解放されるから問題なし
って言う奴は一定数いて説得しても改心しないから放置しとくしかない
後々何かで事故った時のためにドキュメントに書いとけ

775:デフォルトの名無しさん
18/09/06 13:36:44.44 N1zpzsdE.net
たいていドキュメントは失われるので俺ならソースコメントに書いておくな。
「2018/09/06 メモリ解放してないので注意(先輩の指示で改修見送り)」

776:デフォルトの名無しさん
18/09/06 14:37:14.38 3QzfQDga.net
そりゃ、そういう状況では解放処理は抽象的な書き方にすべきなんですよ。
freeがなければ安心できないのって病気に近いよ。

777:デフォルトの名無しさん
18/09/06 19:28:33.32 5MBNHP4w.net
どういう状況か知らんけど
> こうすれば治りますがみたいなこと
言ってるにも関わらず対応しないのは宗教に近いよ

778:デフォルトの名無しさん
18/09/06 19:34:20.37 hjZ1m3yx.net
>>755
mayersだったかdinkumの人だったか忘れたけど、これはリソースリークじゃないって力説してて、
自分も同じセリフを言ってみたくてmain関数で確保したものを開放せずにいたら、
あとからそのmainだった関数に再入しないといけない要件が増えて涙した。
(小物ツールだったのに…)
というわけでfreeしようぜ

779:デフォルトの名無しさん
18/09/06 19:56:53.52 /8o/0CpY.net
>>757
> ちょっとした処理を行って出力して落ちるだけのプログラム
> 上司が作ったAPIを利用して機能作れって指示
× API
○ ツール
上司が作ったちょっとした「ツール」を使って(データの一部を切り出してきて)パイプ等で受ける場合、
そのツールがプロセス終了時に解放してないと文句を言うのは煙たがられる。
それは「意識高い系」すぎるし、そもそも君の担当範囲に何も悪影響はない。
そんなことはいいからお前の担当部分のバグを直せ、と思われているはず。
一応言っておくとfreeもタダではないので速度は落ちる。
必ずその後にプロセスが終了すると分かり切っているのなら放置もありだし、そっちの方が速い。
大方、精々1000行以下の上から下までつるっと動くだけのプログラムで、
最初に1回ワーク領域としてmallocして終わり、のパターンだろ。
割とどうでもいいね。実行形式のみでの配布なら問題になることはない。
(俺ならfreeしておくが。理由は>>766と同じで、流用するときにバグるから)
なお「API」では通常、別プロセスを起動して呼び出すことはない。(俺の知る限り)
本来「ツール」と表現すべき所を意図的に「API」と言うなら、相当な悪意だと受け取られる。
ただ単に間違ったのなら、お前は上司に対していちいち文句を言わず、
指示されたようにやるべきレベルだ。わきまえた方がいい。
ソースコードにコメント、は止めた方がいい。そこは上司への不満を書く場所ではない。
直すなら「潜在バグ」として正式登録、その必要がないと判断するなら放置したほうがいい。
数年後、君によって後輩が助かれば君は讃えられるだろうし、
そうでなければ君は痛かった奴だなと思われる、ただそれだけの話だ。
コメントだけ残して修正してませんでした、ってのはマジで痛いだけだから止めとけ。
誰も助からないし、生産性がない。
(バグを踏んだ後輩から見れば責任逃れせずにちゃんと直しておいてくれ、としか見えない)
そもそもそのツールがバグってたのなら作った上司の責任だし、
上司がそれを面倒がるのなら、そのソースの管理責任を君が受け取って自由に出来るはず。

780:デフォルトの名無しさん
18/09/06 19:59:05.01 xdo6cDUj.net
そんなに速度のことが気になるなら、グローバルでドカッと変数確保すりゃ良いだろう

781:
18/09/06 20:06:34.02 N2ZzCqNY.net
>>755
きちんと malloc() した領域を free() できているように、それを重点的に書き直していくだけでも、プログラムの構造がわかりやすくなり、バグも少なくなるとおもいます

782:
18/09/06 20:08:11.19 N2ZzCqNY.net
>>768
そうそう、malloc() したポインタを線形リストに登録しておいて、最後にまとめて free() するとか…

783:デフォルトの名無しさん
18/09/06 20:09:17.57 L7E4s+iy.net
>>768
さすがにそれはセンスがないのでは
ドカッと一発mallocならまだしも

784:デフォルトの名無しさん
18/09/06 20:12:16.01 xdo6cDUj.net
ツールに使う程度の小規模なプログラムなら、
グローバルで取ろうと気にしなくて良いと思うけどな

785:デフォルトの名無しさん
18/09/06 20:16:36.65 /8o/0CpY.net
>>768
さすがにプロセス起動/終了の方がfreeより100倍以上重いはずなので、
ここでfreeを速度の為にケチる、というのはナンセンス。
ただ、free一個分速いのは事実だし、Cは精神論的に速度を希求するからねえ。
多分、最初はグローバルで固定長バッファだったが、
もっと大きなサイズも必要になって、面倒だったからど頭でmallocに変更、だと思うよ。
割とありがちなパターンだし、この場合はfreeしない文化のような気もする。

786:デフォルトの名無しさん
18/09/06 20:32:13.62 5MBNHP4w.net
最近はあまりないけど実メモリーがカツカツの状態だとfree()する為にディスクからページを読み込む処理が大量に発生してなかなかアプリケーションが終了しないと言う事があったりする

787:デフォルトの名無しさん
18/09/06 20:36:44.52 w4APQ8t2.net
exitって重いの?
まあfreeするもんだと決め打ちはしたらあかんよ

788:デフォルトの名無しさん
18/09/06 20:38:25.83 64ZwjQvb.net
freeしてないコードを池沼が書いて
freeしてないコードを
実績があるコードといって池沼が確かめもせずそのままコピペして流用する
よくあること

789:デフォルトの名無しさん
18/09/06 20:40:44.45 64ZwjQvb.net
つまり池沼の代重ねで
どんどんメモリリークが酷くなっていく

790:デフォルトの名無しさん
18/09/06 20:49:38.63 u/2SwpDg.net
dtr は作るけど、コメントに「プロセス終了時にしか実行しないのでfreeしてない」と書いて放置してるわ

791:デフォルトの名無しさん
18/09/06 20:57:43.99 /8o/0CpY.net
>>774
ああ、なるほど。
そういえばスワップがある時にFireFoxを落とすだけでもずいぶんかかっていたのを思い出した。
なるほどそこでスラッシングしてたのか。

792:デフォルトの名無しさん
18/09/06 21:05:57.78 2H4On29+.net
>>779
うちの FireFox も終了時にモタモタしてるから、そうなるのが分かってる時はタスクマネージャーで殺したりするw
つかアプリは終了時に保存するもの保存したらリソースそのままで exit しちゃう方がいい気がしてきたわ。

793:デフォルトの名無しさん
18/09/06 21:22:48.78 lfEPMv1j.net
freeでスワップからページ読み込みするってマジ?
freeだけならdirtyページドロップするだけだと思ってたわ

794:デフォルトの名無しさん
18/09/06 21:38:33.95 iyjSCMca.net
freeがいちいちSVCなんかするわけねえだろ
それと、おまえスワップとページを混同してるな

795:デフォルトの名無しさん
18/09/06 21:42:11.21 RfogV38/.net
>>781
ポインタ書き換えたりするから一度ディスクからメモリに戻さざるを得ないのでは?
ものすごく大きい領域を一括で確保した場合は全部戻す必要ないけど細切れに沢山確保してあるのをバラバラにfreeしたらなりそうだよね。

796:デフォルトの名無しさん
18/09/06 21:46:37.65 7YUMDOtR.net
>>781
free()すると管理領域を書き換えるためにページインが必要になる

797:デフォルトの名無しさん
18/09/06 21:52:07.32 SMB/Y5b1.net
ランタイムの実装とOSにどう伝えてるかの間のことを考え出すと激しく禿る思考停止
unix/linux な人はどう実装してるか確認してるの?

798:デフォルトの名無しさん
18/09/06 21:54:14.48 N6MGums/.net
>>782
そうなの?
例えばWindowsだとfreeは内部でHeapFreeをコールしてるのかと思ってた。
HeapFreeって恐らくSVC伴うよね?

799:デフォルトの名無しさん
18/09/06 23:11:21.70 xdo6cDUj.net
皆さん、実メモリってどの位積んでいるの?

800:
18/09/06 23:42:12.50 N2ZzCqNY.net
>>787
DDR3 16G です、もっとほしい…

801:デフォルトの名無しさん
18/09/06 23:43:10.77 f49/P0Og.net
8G
しかしこのPCは5年以上前に買ったやつ。

802:デフォルトの名無しさん
18/09/06 23:53:41.06 iNL3W5R4.net
>>781
単純に free だけの話じゃなく、自分が作り上げたオブジェクトツリーを辿りながら free していく過程でその(結局解放する)オブジェクトをページインすることになる。
C でオブジェクトとか言うことの是非は置いといて。

803:デフォルトの名無しさん
18/09/07 00:04:11.13 oKo9UKIA.net
>>787
Windows7 で 3GB。
Linux な家サーバだと 1GB。
Cプログラミングスタイルも細かくブロック分けてスタック節約するようなセコセコ型が基本。

804:デフォルトの名無しさん
18/09/07 06:00:25.35 Pk3Mmzkj.net
個人で使うための大したことないツールだったか、
この件の実験用に作ったプログラムだったか忘れたけど…。
そこそこ沢山のデータを、ひとつ読み取ってはmallocで確保した領域に保存、
ハッシュテーブル(値が重複する要素はリンクド・リストでつなぐ)にブチ込んで
個々のデータはプログラム終了まで破棄しない、て条件。
終了前に真面目にfreeして回るのと、そのままexitしてOSに片付けてもらうのと、
比較してみたらfreeのループ処理が意外に重かったんで、
解放処理の関数を残したまま呼び出し部だけ注釈にして、
// 解放すべきだと思いつつも無駄に重いんでOSに上手いことやってもらう
みたいな自分用のメモを残したわ。我ながらどっちつかずの折衷案。

805:デフォルトの名無しさん
18/09/07 07:56:45.53 ZG8Bsw3G.net
>787
Win7以降で最低4G、可能なら8G。3Dゲームやるなら16G以上。
XP時代は2Gか3Gだった。

806:デフォルトの名無しさん
18/09/07 07:57:24.56 1SEeRaQU.net
>>787
今使ってるマイコンのRAMは64バイト

807:デフォルトの名無しさん
18/09/07 08:06:16.22 1SEeRaQU.net
メモリを確保しっぱなしでわざわざ明示的に解放コードを書かないことはある
C++じゃなくてCだと特に
組み込みだとそもそも終了処理なんて物が無かったりする

808:デフォルトの名無しさん
18/09/07 08:35:25.77 Ge6Y8svS.net
>>792
(俺はそういう状況に遭遇したことがないが、)やるなら、
freeを生かしたまま残し、その直前でexit、
exitに「// free が遅いからここで強制終了」とコメントかな。
そもそもCはやたらfreeするようには出来てない。それはK&Rのfree実装をみても明らかだ。
C++や他GC言語のようにインスタンスを個別にmalloc/freeした方が
プログラミング的に美しく、自由度があるのも確かだが、
古来C流なら
> 個々のデータはプログラム終了まで破棄しない、て条件。
が分かっている時点で纏めてmallocし、内部的に切り出して使う、とかじゃないかな?
大きなテキストを1発mallocで確保し、内部的に改行コードで区切って使うみたいに。
初期データはインミュータブル扱い、追加/変更はインスタンス毎個別に確保、だ。
ただこれだと結局コードは増えてしまうし、個別freeすべきかのフラグを導入するか、
解放関数でインミュータブル領域かどうかを判定する必要がある。
そういうのが面倒だと最初から全部C++流にインスタンス毎個別に確保になり、
その分動作が遅くなるが、コード自体は綺麗に(統一的に)保たれる。
結局、コードを取るか、手間かけてその分高速化するか、でしかない。
気にならない程度なら、俺はC++流の個別確保の方がコードが綺麗だからいいと思うが。
(つまり今の君の実装)
気になるのなら、選択の余地無く高速化するしかないし。

809:デフォルトの名無しさん
18/09/07 08:38:20.43 oKo9UKIA.net
>>795
むしろ C++ の方が気安く new するから、そっちの方が放置したくならないかね。
根っこのオブジェクトを delete すれば後のはデストラクタがやってくれるとかで面倒さは少ないのかもしれないが。
何にしても、許されるのはきちんと解放できるけどあえてしない、ってのだけだな。
なんだかよく分かんないし面倒からOSに尻拭いしてもらうなんてのはダメだ。
fork で起こした子プロセスがメモリを free せず終了しても問題無いが、それをスレッドにしましょうなんてなった瞬間に破綻する。

810:デフォルトの名無しさん
18/09/07 09:28:39.55 8HJNQC7B.net
商業プログラムだとラッパだらけで直接free呼ばんし。
freeなしという選択肢は常に確保しとけばよい。

811:デフォルトの名無しさん
18/09/07 11:25:43.88 /+XJI6DP.net
>>786
え、WindowsにSystem z版てあるんだっけ?

812:デフォルトの名無しさん
18/09/07 12:12:28.24 veel+fh4.net
>>799
え?System z限定の話だったの?

813:デフォルトの名無しさん
18/09/07 12:18:34.93 /+XJI6DP.net
>>800
だってSVCって。。。

814:デフォルトの名無しさん
18/09/07 12:28:11.67 veel+fh4.net
>>801
スーパーバイザコールを拡大解釈して、いわゆる特権モードを伴うシステムコールとして書いてたわ。
誤解があったらすまん。

815:デフォルトの名無しさん
18/09/07 12:36:08.16 H0y7xQ1z.net
>>781
mmap経由ならOSによってはそうかもな

816:デフォルトの名無しさん
18/09/07 12:51:04.62 /+XJI6DP.net
>>802
おk
じゃあ、その前提で話を戻そう
freeはISO/IEC9899では宣言と引数の意味のみが規定され実装は未規定だ
782でああ言ったのは、freeする度毎にタイムスライスを放棄するような実装は
まずなかろうということだ

817:デフォルトの名無しさん
18/09/07 14:34:23.02 lg5TGvmQ.net
>>804
まず、786で書いたようにあくまで「思ってた」だけで確固たる根拠はないことを前提に。
freeするならどこからか借りていたメモリ領域を返却するわけで、仮想メモリ返却にはMMUを使ったページ管理が必要だよね?
仮想メモリページ管理はメモリマネージャー的なカーネルモードドライバが必要なはずで、つまり解放時にはシステムコールを伴う。
ただ、HeapFree時に直接カーネルモードで解放が実行されずメモリマネージャがガーベジコレクション的に後々回収するなら、あなたの言うとおりfree時にユーザーモードで閉じて処理されるかも。
このへん、Linuxとかどういう実装になってるんだろうね?

818:デフォルトの名無しさん
18/09/07 14:55:15.04 Yr/2DouQ.net
画期的なメモリ確保方式とか出来ないかな
例えばさ、名前付きタグを付けてメモリ確保し、
名前指定で一気に解放できるようにするとか

819:デフォルトの名無しさん
18/09/07 15:22:58.08 OFkeqRjw.net
Rust?

820:デフォルトの名無しさん
18/09/07 15:56:06.95 /+XJI6DP.net
>>805
freeがメモリを返却する相手が何者なのかは未規定だぞ
いちいちOSへ直に返しているとおまえさんの言うとおりだが
スタティックリンクライブラリがOSから大口で借りたメモリを切り売りする
スタイルならシステムコールの回数をガクンと減らせる
よくある実装は1MiBあたりを境に小容量は切り売りで大容量は直にという形

821:デフォルトの名無しさん
18/09/07 16:07:14.96 lg5TGvmQ.net
>>808
いや、俺はANSI Cとかの規定の話してるんじゃなくて、SVCって単語からこの議論がスタートしてるのでモダンなOS上の一般的な実装の話をしてると思ってたんだけど、違ったのか。
確かにアプリ起動時にある程度のヒープを最初から用意ってのはありそう。

822:デフォルトの名無しさん
18/09/07 16:15:46.30 lg5TGvmQ.net
>>806
ソフトで実現で良いなら、簡単に実現できそうね。
てかsmbか何かでそういう実装見たことあるような?

823:デフォルトの名無しさん
18/09/07 17:07:55.49 +cI6iexZ.net
>>805
Linux+glibcの環境なら、mallocは昔ながらのbrkシステムコールの方法と
mmapシステムコールの方法が状況に応じて使われる
freeしたときmmapをmunmapしてOSに返されることもある
はず。…たしか

824:デフォルトの名無しさん
18/09/07 18:11:36.24 lg5TGvmQ.net
>>811
なるほど、勉強になります。
やっぱりOSのメモリ管理をちゃんと理解しようとしたら参考になるので最低限glibcとmmapを読まないといけないね。

825:デフォルトの名無しさん
18/09/07 20:33:47.92 lg5TGvmQ.net
ちらっとmmapとglibc斜め読み


826:してみた。 こんな世界があるんだとソフトエンジニア7年目にして新しい視点が開眼しそう。 色々気付きをくれた方々、ありがとうございました。



827:デフォルトの名無しさん
18/09/07 23:08:07.85 Ge6Y8svS.net
>>806
ゆとりりゅうのすごいめもりかくほ、まで読んだ。
マジレスすると、
> 名前付きタグ
このコストが分からない馬鹿はCを学ぶ意味はあるだろう。
スクリプト言語しか使ったことのない奴に多いが。(例:ハッシュはタダだと思ってる)

>>805
> 仮想メモリ返却にはMMUを使ったページ管理が必要だよね?
お前は中途半端に勉強してるな。まあ悪いことではないが。
ページの単位は今も昔も4KBだ。その方法ではインスタンス毎の確保は出来ないと分かるだろ。
>>812-813
読むのは勝手だが、あまり関係ないところに深入りしても意味はないぞ。
7年目なら業務関連は一通り出来るようになっており、知識を横に広げているのかもしれないが、
OS関連の知識があってもな。
時間が有り余っていて手当たり次第に知識を吸収するのも一つの手だが、
もし大きい(10,000行以上)のを書いたことがないのなら、
まずは規模の限界(複雑さの限界)に挑戦する方がいいと思うが。

828:
18/09/07 23:21:41.29 WaHB6+zk.net
>>814
>もし大きい(10,000行以上)のを書いたことがないのなら、まずは規模の限界(複雑さの限界)に挑戦する方がいいと思うが。
そうですね…
1万行ですか…
せいぜい 1000 行程度までしかやったことがありません、モチベーションが続かない・燃料切れ、という感じです

829:デフォルトの名無しさん
18/09/08 00:12:07.00 kEO


830:PIOXH.net



831:デフォルトの名無しさん
18/09/08 00:16:36.09 L3ZkEci+.net
だいぶ初歩の質問なんだけどextern宣言って本当に必須なの?コンパイラというかリンカによるのかもしれないけど、つけなくても同じ動作するよね?
今まで疑問に思わず書いてたけど、これを聞かれて色々試してみると実際つけなくても同様の動きしてるように見えるし、ちゃんと答えられなかったわ

832:デフォルトの名無しさん
18/09/08 00:16:57.63 Bduckbke.net
>>816
ならお前なりの妥当な規模を測る単位でも示せよ

833:デフォルトの名無しさん
18/09/08 00:24:37.23 cJyrgWby.net
>>816
否定ばかりして新しい提案をしない典型的無能要員

834:
18/09/08 00:43:40.72 t7GfMYxV.net
>>817
ライブラリ関数をコールするだけなら extern は要らない子です、でもライブラリが独自の変数を定義して公開しているのならば extern がないと困ります
例えば <stdio.h> の stdin, stdout, stderr

835:デフォルトの名無しさん
18/09/08 01:03:55.35 Bduckbke.net
>>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.
> URLリンク(www.geeksforgeeks.org)
下のコード例が見やすい。
これが規格と合致しているのかは知らん。

836:
18/09/08 01:26:25.96 t7GfMYxV.net
>>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.
私には、これはリンカの仕業であってコンパイラが自ら行動しているようには見えないのですが…

837:デフォルトの名無しさん
18/09/08 04:02:52.50 5gcJr6RX.net
glibc は malloc だけで 5000行あるってね。
上級者スレに解説動画があったけど面白かったよ。

838:デフォルトの名無しさん
18/09/08 09:36:45.93 gGqp1fFu.net
>>814
>ページの単位は今も昔も4KBだ。その方法ではインスタンス毎の確保は出来ないと分かるだろ。
ごめん、これがよく分かんない。
MMUのページ単位が4KBなのと、インスタンス毎の確保はできないってのがつながらない。
てかここで言うインスタンスって何?

839:デフォルトの名無しさん
18/09/08 09:55:06.11 +lRq1NsW.net
>>824
インスタンス1つにいちいち4KBもアロケートするのかって話だろ

840:デフォルトの名無しさん
18/09/08 10:01:56.96 gGqp1fFu.net
>>825
別に1回のmallocで必ずしも毎回4KBのベージを割り当てる必要ないのでは?
mallocするのが小さいサイズなら確保済みの4KBの空いてるとこから割り当てれば良いし。
実際にはどういう実装になってるか知らんけど。

841:デフォルトの名無しさん
18/09/08 10:10:27.96 3yA/EH7F.net
そもそも動的メモリ確保/解放と仮想メモリ管理は直接関係ない話
組み込みだとMMUなんて存在しない環境もある

842:デフォルトの名無しさん
18/09/08 10:12:51.74 Bduckbke.net
>>826
それだとお前のレス
> freeするならどこからか借りていたメモリ領域を返却するわけで、仮想メモリ返却にはMMUを使ったページ管理が必要だよね?
> 仮想メモリページ管理はメモリマネージャー的なカーネルモードドライバが必要なはずで、つまり解放時にはシステムコールを伴う。
と矛盾するだろ。
お前は日本語が駄目なタイプか?

843:デフォルトの名無しさん
18/09/08 10:15:40.02 gGqp1fFu.net
>>828
そういう意味では、厳密には「4KB以上のfree」と書くべきだったかな?
ページサイズに言及したのは先の書き込みの後なので別に論理矛盾はないと思うけど。

844:デフォルトの名無しさん
18/09/08 10:25:31.57 +lRq1NsW.net
>>826
うん、俺もそう思うし
実際の実装もそうなっているのが多い
ただし4KBではなく1MiBとかだけど

845:デフォルトの名無しさん
18/09/08 10:29:17.43 Bduckbke.net
>>829
ぷろぐらみんぐのまえににほんごをがんばれ

846:デフォルトの名無しさん
18/09/08 10:29:54.08 gGqp1fFu.net
業務に関係なく完全に知的好奇心からのmalloc実装の想像だったので、やっぱりglibc読んでみよう。
色々レスくれた人、ありがとう。

847:デフォルトの名無しさん
18/09/08 10:38:55.04 LzkjeqyB.net
ファイルシステムの管理領域が大きくなりすぎて、
4KB以下のページサイズには出来ない
4MBで千個、4GBで百万個のページを管理しないといけないから、
管理領域だけでも、100MB以上になる
だから、ページサイズをもっと大きい、2MBにすると、
2GBで千個、2TBで百万個のページを管理できるから、今のHDD の容量に対応できる

848:デフォルトの名無しさん
18/09/08 10:43:05.81 +lRq1NsW.net
HDDだとシリンダ容量との親和性を考えないとね
だけどSSDが普及してる今どきの事情だとどうなんだろう

849:デフォルトの名無しさん
18/09/08 10:55:59.74 AeS6DVc8.net
>>833
> 4MBで千個、4GBで百万個のページを管理しないといけないから、
> 管理領域だけでも、100MB以上になる
管理領域ってどう計算してるの?

850:デフォルトの名無しさん
18/09/08 10:58:20.45 cJyrgWby.net
一領域当たり100byte

851:デフォルトの名無しさん
18/09/08 11:02:40.38 AeS6DVc8.net
>>836
すまん、聞き方がアホだった
その1領域が100Byteになる理由を聞きたかった

852:デフォルトの名無しさん
18/09/08 11:31:35.27 Bduckbke.net
>>833
つHugePage

853:デフォルトの名無しさん
18/09/08 16:08:33.18 u7HqPj1f.net
utf8procというUnicodeライブラリを使いたいのですが、C99に準拠してるかどうかって分かりますか?
「emulate C99 bool」というコメントがソースコードにあったのでおそらくC89あたりからサポートしていると思うんですが。
URLリンク(github.com)

854:デフォルトの名無しさん
18/09/08 17:17:58.22 AMMRWQYD.net
>>839
C99に準拠している
そのコメントの少し前に
「MSVC prior to 2013 lacked stdbool.h and inttypes.h」ってコメントがあるからWindowsの古い環境のためにboolとかを定義しているだけだね

855:デフォルトの名無しさん
18/09/08 18:36:43.66 LzkjeqyB.net
OSのすべての機能を学びたいなら、ムック本の
Linuxエンジニア養成読本、第3版、2016
カーネル、起動処理、仮想記憶、
ファイルシステム、シェルスクリプトなど
ファイルシステム・管理領域の仕組みなどを読んで

856:デフォルトの名無しさん
18/09/08 18:44:21.19 +lRq1NsW.net
タネンバウム先生の本でしょ
すごい弟子を育てた伝説の師匠

857:デフォルトの名無しさん
18/09/08 18:49:46.85 kiLcyFGE.net
なにそれ、すごい面白そう!
アラサーだけどまだまだ青二才だしとっても勉強になります!

858:デフォルトの名無しさん
18/09/08 19:31:07.27 AeS6DVc8.net
>>841
>>837にレス頼む

859:デフォルトの名無しさん
18/09/09 05:27:49.39 pVz5FNGY.net
>>840
ありがとうございます!
これでUnicodeが古い環境で心置きなく使えますわ。

860:デフォルトの名無しさん
18/09/09 14:54:16.40 /XE3HNn6.net
ここのスレの人はValgrindは
使っているんだろうか。
メモリリークとか考えれば
ぜひ使うべきツールだと思う。
URLリンク(qiita.com)

861:デフォルトの名無しさん
18/09/09 15:31:42.46 pIlBTOwT.net
便利だよね
ただ役に立ってるときはクソコードを触ってるときでもあると思う

862:デフォルトの名無しさん
18/09/09 15:44:39.72 DwszjCT1.net
変数中の "1" のビット数を数える効率的方法ありますか?
aが32ビットとして
for (i = 0; i < 32; i++) {
j = j + a & 1;
a = a >> 1;
}
みたいに1ビットずつカウントするしかないでしょうか
あるいは、8bitとかで区切ってテーブルを引いて加算とかでしょうか(16ビットや32ビットのテーブルは現実的でないので)

863:デフォルトの名無しさん
18/09/09 15:50:52.78 V1LakR3i.net
a=(a&0a55555555)+(a>>1&0a55555555);
a=(a&0a33333333)+(a>>2&0a33333333);
a=(a&0a0F0F0F0F)+(a>>4&0a0F0F0F0F);
a=(a&0a00FF00FF)+(a>>8&0a00FF00FF);
a=(a&0a0000FFFF)+(a>>16&0a0000FFFF);

864:デフォルトの名無しさん
18/09/09 15:53:41.89 V1LakR3i.net
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);

865:デフォルトの名無しさん
18/09/09 16:07:17.49 TAQT5wBe.net
32ビットだしその書き方良くないと思います

866:デフォルトの名無しさん
18/09/09 16:54:40.77 V1LakR3i.net
URLリンク(ideone.com)
なにも問題ない
レスをコピペで普通に動く
アホがいちいち車輪の再発明するよりとりあえず↓コレ使っとけば間違いない
URLリンク(gcc.gnu.org)
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.

867:デフォルトの名無しさん
18/09/09 17:39:09.00 /XE3HNn6.net
>>847
自作ツールで無茶苦茶
役に立ってしまった。
そうか、クソコードだったかw
それはさておき今回の発端>>757は、
メモリリークなんか気にしはじめたら
修正コストがどれくらいかかるか
わからない、それだったら現状で
問題は表面化してないし、
そのままでいいじゃん、みたいな
状況だと思う。
Vargrindを導入して
手軽にメモリリークを
チェックできれるようになれば、
上司にもとりあえず直しましょう
という説得ができる
チャンスもあるかも。

868:デフォルトの名無しさん
18/09/09 17:57:06.08 2r/FT+Vi.net
>>850
うまいやり方だなぁ

869:デフォルトの名無しさん
18/09/09 17:57:22.00 lGJ+2GvF.net
>>850 この式は初めて見ると訳の分からない呪文みたいだけど、
落ち着いて考えると分割統治の技法を並列処理してるんだよね。
これで1の立ってるビットの数が分かる理由を考えるのは良い教材かと。

870:デフォルトの名無しさん
18/09/09 18:06:01.01 2r/FT+Vi.net
>>850
少なくとも最後の行だけは
a = (a + (a >> 16)) & 0x0000FFFF;
の方がよさそう。
正確には最大 32 にしかならないから & 0x0000001F でもよさそうだし、値の上限を考えながらだと途中の行ももう少し演算を減らせたりするかも?

871:デフォルトの名無しさん
18/09/09 18:06:59.52 2r/FT+Vi.net
>>856
0x0000003F だったw

872:デフォルトの名無しさん
18/09/09 20:35:00.38 2r/FT+Vi.net
>>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% くらい速くなった。

873:デフォルトの名無しさん
18/09/09 20:36:22.47 2r/FT+Vi.net
>>858
0F 多すぎw
0x0F0F0F0F ね

874:デフォルトの名無しさん
18/09/09 21:00:45.14 4c2hO8gX.net
しね

875:デフォルトの名無しさん
18/09/09 21:13:17.93 2r/FT+Vi.net
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 の速度最適化を入れるとどれも変わらないね。

876:デフォルトの名無しさん
18/09/09 21:19:41.88 4c2hO8gX.net
なに1人ではしゃいでんのこいつ。

877:デフォルトの名無しさん
18/09/09 21:28:41.02 Vmegj8Hy.net
CPUにそういう命令なかったっけ?
使うところでは割と使いそうだけど

878:デフォルトの名無しさん
18/09/09 21:45:09.16 5vkdTLeD.net
>>863
AlphaとかM16Cとか古いCPUにはあった気がする。
最近はあんまり見ないね。

879:デフォルトの名無しさん
18/09/09 21:54:33.81 nMOWxsiw.net
ああ、SSEにpopcntがあるね

880:デフォルトの名無しさん
18/09/09 22:32:42.62 hCV1tk8e.net
ポックント

881:デフォルトの名無しさん
18/09/10 02:37:34.95 hUyLWeb6.net
ビットを数える・探すアルゴリズム
URLリンク(www.nminoru.jp)

882:デフォルトの名無しさん
18/09/10 10:36:25.17 o5mvkory.net
ビット数の数えあげが欲しくなるのってパリティチェックで末尾付加したりするとき?

883:デフォルトの名無しさん
18/09/10 10:44:53.73 cl7nWcjG.net
ソケットみたいにフラグをビット管理してるときとかもほしくなるかな

884:デフォルトの名無しさん
18/09/10 10:56:31.39 ddUFIgl6.net
符号とか暗号とかの世界ではしょっちゅう使うよ。
1の数で最適なアルゴリズムが変わるってケースもあるし、
暗号にサイドチャネル攻撃仕掛けるにはハミング距離とか重要。

885:デフォルトの名無しさん
18/09/10 11:27:01.59 o5mvkory.net
>>870 はなんとなく理解できるけど >>869 のほうは想像がつかないな
ビット管理されたフラグと ONしてるビット数による分岐や演算法が変わるのが直結しない感じ

886:デフォルトの名無しさん
18/09/10 11:51:19.73 kNISuHie.net
フラグは数えねえよな
性能重視でもなければビットフィールド使って読みやすくして欲しいわ

887:デフォルトの名無しさん
18/09/10 11:54:23.84 iqhXZjjt.net
バラで書くから読みにくいのであって
関数にしておけば外から見た仕様は変わらない

888:デフォルトの名無しさん
18/09/10 12:16:32.03 /R6yufrK.net
普通の通信でエラー検出以外の目的でビット数を数える必要性がわからない。
そんな特定のCPU以外は必ず無駄な計算が必要になる方式をなぜ使う?

889:デフォルトの名無しさん
18/09/10 12:46:33.22 x2RTnFiS.net
>>874
エラー検出、訂正目的以外の通信のためにビットの数え上げするって誰かレスしてたっけ?

890:デフォルトの名無しさん
18/09/10 15:09:59.53 rXvKnWV4.net
>>875
>>869はそうではないのか?ならば居ないな。

891:デフォルトの名無しさん
18/09/10 19:25:38.98 YAHzQjjo.net
>>821
んーこの文章読むと、よく教科書的な本に書かれてる関数に対してexternを書きましょうってのは冗長で不要って話なのね。確かに実際の動きとは合うし勉強になりました。
>>822
書いてる意図を汲めてるのか自信ないけど、他のサイトにもリンカ依存とあって、この話が全ての環境に対して正しい話なのか・・・若干不安はある感じ?

892:デフォルトの名無しさん
18/09/10 19:32:05.94 WVFJrP31.net
Common Lisp にビットを数える関数があるけどcでも同様のものがあったようなゔ

893:デフォルトの名無しさん
18/09/10 20:00:47.59 pZnz0RBT.net
int a=0;
printf("%p" ,a);
printf("%p",&a);
同じアドレスが表示されると思っていたのですが、上下で違う数字が出力されました。
アドレスを表示するのはどちらが正しいのでしょうか?
よろしくお願いします。

894:さまよえる蟻人間
18/09/10 20:06:35.73 NJC2soWX.net
下。

895:デフォルトの名無しさん
18/09/10 20:07:47.31 WGo2tHWR.net
>>879
&a の方。
ていうか同じになるわけがない。片方は printf() に a の内容である 0 を渡しているんだから。

896:デフォルトの名無しさん
18/09/10 20:26:02.04 6MAzJtEj.net
%p は ポインタを要求しているが
ポインタのサイズと intのサイズが違ってたら 鼻から悪魔

897:デフォルトの名無しさん
18/09/10 20:28:01.62 pZnz0RBT.net
>>880
>>881
>>882
指定子Pで&が付いてない方も変換されると思っていました。
ただの数値が表示されるだけなんですね。
int *a;
int b=0;
a=&b;
printf("%p",a);
この場合は&が付いてなくてもアドレスを渡してるのでokなんですね。
ありがとうございました。

898:デフォルトの名無しさん
18/09/10 20:29:18.90 WGo2tHWR.net
天文学的な値が出るかも知れんね

899:デフォルトの名無しさん
18/09/10 20:30:01.84 WGo2tHWR.net
>>883
そうそう。そういうこと。

900:デフォルトの名無しさん
18/09/10 20:43:33.30 l5sdNefZ.net
>>869
それはどっちかって言うとビットサーチだね
68020 とかの BFFFO 命令とか

901:デフォルトの名無しさん
18/09/10 21:01:01.97 XzQQxj6r.net
URLリンク(ideone.com)
また、低学歴知恵遅れのクルクルパーがウソ書いてるわ。。。
64bitのアドレス空間を持ってて、intのサイズが32bitならちゃんと動くワケがないからな

902:デフォルトの名無しさん
18/09/10 21:07:42.09 XxqHEWUO.net
>>887
どの書き込みに対してのレス?

903:デフォルトの名無しさん
18/09/10 21:11:41.72 7zqNUn7X.net
>>887
これまたチンケな知識でマウント取りに来たな w

904:デフォルトの名無しさん
18/09/10 21:12:59.71 XzQQxj6r.net
ID:WGo2tHWR ← コイツにきまってんだろ
なあにが
 そうそう。そういうこと。

なにも知らないムクなヤツ相手に
低学歴知恵遅れの分際でテキトーなことばっかり書き込んでる

905:デフォルトの名無しさん
18/09/10 21:16:56.02 XxqHEWUO.net
ん?これのこと?
> printf() に a の内容である 0 を渡している

906:デフォルトの名無しさん
18/09/10 21:19:04.26 6SoA/END.net
こんなにでかい釣り針だと
鯨が釣れるかも

907:デフォルトの名無しさん
18/09/10 21:19:36.92 XzQQxj6r.net
>>883 ← ムクな初心者
>>885 ← 低学歴知恵遅れ ID:WGo2tHWR 「そうそう。そういうこと。」 ← コレのコトだ
低学歴知恵遅れはレスもおえないの?

908:デフォルトの名無しさん
18/09/10 21:21:51.21 XxqHEWUO.net
あれ?
int *a;
int b=0;
a=&b;
printf("%p",a);
って別に正しくね?

909:デフォルトの名無しさん
18/09/10 21:22:53.59 XzQQxj6r.net
URLリンク(ideone.com)
この処理結果みても分からないなら
オツムに相当な問題がある

910:デフォルトの名無しさん
18/09/10 21:25:52.44 XxqHEWUO.net
ううむ、俺にはaは64ビット環境だと64ビット長に見えるのだが違うのか?

911:デフォルトの名無しさん
18/09/10 21:27:36.20 XzQQxj6r.net
で、処理結果みた?
で、処理結果みた?
で、処理結果みた?

912:デフォルトの名無しさん
18/09/10 21:29:43.88 XxqHEWUO.net
おたくのサンプルは64ビットアドレスをintにキャストしちゃてるやん。そりゃ実行結果違うわ。

913:デフォルトの名無しさん
18/09/10 21:31:35.87 XzQQxj6r.net
URLリンク(ideone.com)
キャストはずしたったぞ
当然、結果はかわらない
やっぱりなこの板は低学歴知恵遅れしかいない
この程度のこともわからずにいきってレスしてるワケだからな

914:デフォルトの名無しさん
18/09/10 21:31:51.59 6MAzJtEj.net
たまたま 足りない分 0 を引っ張ってきてるけど(レジスタで渡ったから?)
スタックに積んでるリターンアドレスの一部から足りないのを補ってると、もっとわけわかな数値に
未定儀の挙動を推測すすのもまたオツなもの か

915:デフォルトの名無しさん
18/09/10 21:32:51.


916:39 ID:XxqHEWUO.net



917:デフォルトの名無しさん
18/09/10 21:33:36.29 XzQQxj6r.net
そんなことオレのしったことじゃないからな
 >>883 ← ムクな初心者
 >>885 ← 低学歴知恵遅れ ID:WGo2tHWR 「そうそう。そういうこと。」 ← コレのコトだ
低学歴知恵遅れはレスもおえないの?

918:デフォルトの名無しさん
18/09/10 21:40:38.56 lZ/O7dtJ.net
半角クンていつも周りを見ずに自分の思い込みだけでレスしちゃって誤り訂正できないから、恥ずかしい(*/□\*)
直進しかできない目隠しされたイノシシみたい

919:デフォルトの名無しさん
18/09/10 21:42:09.42 XzQQxj6r.net
なにが間違いなわけ
指摘してみ
一切間違ったこと書いてないからな
低学歴知恵遅れはそもそも認知能力に問題がある

920:デフォルトの名無しさん
18/09/10 21:47:36.63 XxqHEWUO.net
なぜ64ビットポインタをintに入れたの?
883ではそんなこと一切してないんだけど。
逆に
>printf() に a の内容である 0 を渡している
は整数リテラルがintなのに%pで受けてるので、64ビット環境なら4バイト分スタックのゴミを拾ってきそうだけど。

921:デフォルトの名無しさん
18/09/10 21:48:46.40 XzQQxj6r.net
はずかしくなって
こっち側にこようとしても
もう手遅れだからな

922:デフォルトの名無しさん
18/09/10 21:50:57.43 XxqHEWUO.net
なんだ、結局はaがポインタだってことを見逃しただけかよw

923:デフォルトの名無しさん
18/09/10 21:55:18.07 cYYSBBs1.net
>>906
つ鏡

924:デフォルトの名無しさん
18/09/11 00:11:24.08 X6CualfE.net
>>887
>>883はちゃんと動くよ。

925:デフォルトの名無しさん
18/09/11 06:35:01.60 pvBPsgEg.net
>>909
半角野郎が数行のプログラムも理解できないくせに自分で改竄したコードが動かねぇって騒いでただけ。
半角野郎こそ低学歴知恵遅れクルクルパーで認知能力とオツムに相当な問題があるってことが証明されただけなので気にするな。
本人は顔真っ赤にして逃げたみたいだけど。

926:デフォルトの名無しさん
18/09/11 07:57:47.34 2zsIBj+S.net
ポインタを受け取るべき%p変換指定子に、ポインタでない値を与えることの
危険性は >>882 ですでに指摘されてるのに、後乗りで書いた >>887
こんだけ引っ張れるのは、ある意味で才能かもな。
汚い言葉遣いを我慢しながら拝聴するほど啓蒙的な内容でもないし。

927:デフォルトの名無しさん
18/09/11 08:11:06.15 NBDkJ3+C.net
>>911
半角クンのレスは、5%の真実と15%の間違い・思い込みと80%の繰り言・罵詈雑言でできてるからね。まっとうに読む価値はない。

928:デフォルトの名無しさん
18/09/11 09:54:24.68 oX9GyHv1.net
まれにいいこと言う
850とか

929:デフォルトの名無しさん
18/09/11 10:00:02.68 R1B4IsqD.net
釣り針が大きすぎて、クジラじゃないと釣れない

930:デフォルトの名無しさん
18/09/11 11:44:57.89 zLtJmO+E.net
musl-libcのiconvコマンドの本体ってここを見ればいいよね?
URLリンク(git.musl-libc.org)

931:デフォルトの名無しさん
18/09/11 20:05:08.62 YMBQMGAL.net
処理系って何?
cpuかコンパイラの事かなと思ってるんだけど。
間違ってる?

932:デフォルトの名無しさん
18/09/11 20:29:34.46 5X7KAgIC.net
処理系は、翻訳環境と、実行環境に大別される
翻訳環境とはコンパイラ等開発ツールを実行する環境
実行環境とはコンパイル結果のバイナリが稼働する環境、客先と言ってもよい

933:デフォルトの名無しさん
18/09/11 20:36:50.64 YMBQMGAL.net
>>917
バイナリが稼働する環境はcpuってことかな
どうもお世話になりました

934:デフォルトの名無しさん
18/09/11 20:45:37.73 5X7KAgIC.net
cpuだけじゃないメモリが実装されているアドレス
i/oが実装されているアドレス
osの挙動
など様々な要因が絡む

935:デフォルトの名無しさん
18/09/11 21:01:49.97 LZbcaZ/B.net
CPUが同じであっても、
Windowsでは動かせてもmacOSでは動かないとか
同じWindowsでも、64bit環境では動いても32bit環境だと動かないとか

936:デフォルトの名無しさん
18/09/11 21:12:52.13 ShO/owiX.net
半角くん、いたの?
lynx で見てるから何言ってるかわからない。

937:デフォルトの名無しさん
18/09/11 21:17:38.28 pVzZZpUQ.net
ゴミPC早く捨てろ

938:デフォルトの名無しさん
18/09/11 21:28:47.48 zLtJmO+E.net
処理系ってC99に関してはJISで定義されてたよね。

939:デフォルトの名無しさん
18/09/13 21:21:47.72 1sKEH3Wo.net
昔の教科書には
C言語の原稿
↓プリプロセッサ
マクロ・ヘッダファイルが展開された原稿
↓翻訳機
アセンブリ言語の原稿
↓アセンブラ
機械語
↓リンカ
実行可能ファイル
っていう図がよく描かれてて,今でもWebを検索するとよく見掛けるんだけど,ほんとに今現在のコンパイラってこういうことやってんの?
gccやclangって,もはやC言語の原稿からほぼほぼ直接に実行可能ファイルを生成してるんじゃない?
さすがにプリプロセッサくらいはあるかもしれんが。

940:デフォルトの名無しさん
18/09/13 21:32:27.37 CY4XgXEU.net
-vつけて起動してみ。
プリプロcppはcc1に統合された。
gccだと、cc1とかasとかcollect2とかが動いてるはず。
clangはデフォルトだとasなしかも。

941:デフォルトの名無しさん
18/09/13 21:54:33.53 1sKEH3Wo.net
>>925
あざす
やっぱり減ってはいるんだな。
結構ああいう図を見掛けるんで,なんか(ほんとにこんな段階踏んでんのか?)ってモヤモヤしてた。
素人考えだが,あんな風に幾つも重ねてビルドしてたら最適化しにくい気がするし。

942:デフォルトの名無しさん
18/09/13 22:33:23.35 brIJUf4C.net
処理としてはわかれてるよそりゃ

943:デフォルトの名無しさん
18/09/13 23:18:13.03 1sKEH3Wo.net
え そうなん
と思って空のファイルをgcc -vで処理したら
たしかにある程度進んでリンカの段階で エラーになったわ。

944:デフォルトの名無しさん
18/09/13 23:28:49.69 yqnwLH2V.net
bash-4.3$ gcc -v -o aho aho.c ←開始
/usr/lib/gcc/i586-slackware-linux/5.3.0/specs から spec を読み込んでいます
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/i586-slackware-linux/5.3.0/lto-wrapper
ターゲット: i586-slackware-linux
configure 設定: ../gcc-5.3.0/configure --prefix=/usr --libdir=/usr/lib --mandir
=/usr/man --infodir=/usr/info --enable-shared --enable-bootstrap --enable-langu
ages=ada,c,c++,fortran,go,java,lto,objc --enable-threads=posix --enable-checkin
g=release --enable-objc-gc --with-system-zlib --with-python-dir=/lib/python2.7/
site-packages --enable-libstdcxx-dual-abi --with-default-libstdcxx-abi=gcc4-com
patible --disable-libunwind-exceptions --enable-__cxa_atexit --enable-libssp --
enable-lto --disable-install-libiberty --with-gnu-ld --verbose --enable-java-ho
me --with-java-home=/usr/lib/jvm/jre --with-jvm-root-dir=/usr/lib/jvm --with-jv
m-jar-dir=/usr/lib/jvm/jvm-exports --with-arch-directory=i386 --with-antlr-jar=
/root/slackware-current/source/d/gcc/antlr-runtime-3.4.jar --enable-java-awt=gt
k --disable-gtktest --with-arch=i586 --target=i586-slackware-linux --build=i586
-slackware-linux --host=i586-slackware-linux
スレッドモデル: posix
gcc バージョン 5.3.0 (GCC)
(-続く-)

945:デフォルトの名無しさん
18/09/13 23:29:23.47 yqnwLH2V.net
(-続き-)
COLLECT_GCC_OPTIONS='-v' '-o' 'aho' '-mtune=pentium' '-march=i586'
/usr/libexec/gcc/i586-slackware-linux/5.3.0/cc1 -quiet -v aho.c -quiet -dumpba
se aho.c -mtune=pentium -march=i586 -auxbase aho -version -o /tmp/ccVi37md.s ← ①プリプロセス
GNU C11 (GCC) version 5.3.0 (i586-slackware-linux)
compiled by GNU C version 5.3.0, GMP version 6.1.0, MPFR version 3.1.4, MPC
version 1.0.3
warning: GMP header version 6.1.0 differs from library version 6.1.2.
GGC heuristics: --param ggc-min-expand=63 --param ggc-min-heapsize=62246
存在しないディレクトリ "/usr/lib/gcc/i586-slackware-linux/5.3.0/../../../../i58
6-slackware-linux/include" を無視します
#include "..." の探索はここから始まります:
#include <...> の探索はここから始まります:
/usr/lib/gcc/i586-slackware-linux/5.3.0/include
/usr/local/include
/usr/lib/gcc/i586-slackware-linux/5.3.0/include-fixed
/usr/include
探索リストの終わりです。
(-続く-)

946:デフォルトの名無しさん
18/09/13 23:30:05.16 yqnwLH2V.net
(-続き-)
GNU C11 (GCC) version 5.3.0 (i586-slackware-linux) ← ②コンパイル
compiled by GNU C version 5.3.0, GMP version 6.1.0, MPFR version 3.1.4, MPC
version 1.0.3
MPC version 1.0.3
warning: GMP header version 6.1.0 differs from library version 6.1.2.
GGC heuristics: --param ggc-min-expand=63 --param ggc-min-heapsize=62246
Compiler executable checksum: c5a3ffed702d1cd048214b2b66d4a98a
(-続く-)

947:デフォルトの名無しさん
18/09/13 23:30:29.37 yqnwLH2V.net
(-続き-)
COLLECT_GCC_OPTIONS='-v' '-o' 'aho' '-mtune=pentium' '-march=i586'
/usr/lib/gcc/i586-slackware-linux/5.3.0/../../../../i586-slackware-linux/bin/a
s -v --32 -o /tmp/ccMFr9O6.o /tmp/ccVi37md.s ← ③アセンブル
GNU アセンブラ バージョン 2.26 (i586-slackware-linux)、BFD バージョン version 2
.26.20160125 を使用
(-続く-)

948:デフォルトの名無しさん
18/09/13 23:31:04.04 yqnwLH2V.net
(-続き-)
COMPILER_PATH=/usr/libexec/gcc/i586-slackware-linux/5.3.0/:/usr/libexec/gcc/i58
6-slackware-linux/5.3.0/:/usr/libexec/gcc/i586-slackware-linux/:/usr/lib/gcc/i5
86-slackware-linux/5.3.0/:/usr/lib/gcc/i586-slackware-linux/:/usr/lib/gcc/i586-
slackware-linux/5.3.0/../../../../i586-slackware-linux/bin/
LIBRARY_PATH=/usr/lib/gcc/i586-slackware-linux/5.3.0/:/usr/lib/gcc/i586-slackwa
re-linux/5.3.0/../../../../i586-slackware-linux/lib/:/usr/lib/gcc/i586-slackwar
e-linux/5.3.0/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-o' 'aho' '-mtune=pentium' '-march=i586'
/usr/libexec/gcc/i586-slackware-linux/5.3.0/collect2 -plugin /usr/libexec/gcc/
i586-slackware-linux/5.3.0/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/i586-s
lackware-linux/5.3.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccGuF6mf.res -pl
ugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pas
s-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s
--eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o aho /usr/lib/
gcc/i586-slackware-linux/5.3.0/../../../crt1.o /usr/lib/gcc/i586-slackware-linu
x/5.3.0/../../../crti.o /usr/lib/gcc/i586-slackware-linux/5.3.0/crtbegin.o -L/u
sr/lib/gcc/i586-slackware-linux/5.3.0 -L/usr/lib/gcc/i586-slackware-linux/5.3.0
/../../../../i586-slackware-linux/lib -L/usr/lib/gcc/i586-slackware-linux/5.3.0
/../../.. /tmp/ccMFr9O6.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --
as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i586-slackware-linux/5.3.0/crtend
.o /usr/lib/gcc/i586-slackware-linux/5.3.0/../../../crtn.o ← ④リンク

949:デフォルトの名無しさん
18/09/13 23:34:54.24 yqnwLH2V.net
普通に別々のモジュールで独立して処理されてる
①プリプロセス /usr/libexec/gcc/i586-slackware-linux/5.3.0/cc1
②コンパイル /usr/bin/gcc
③アセンブル /usr/lib/gcc/i586-slackware-linux/5.3.0/../../../../i586-slackware-linux/bin/as
④リンク /usr/libexec/gcc/i586-slackware-linux/5.3.0/collect2

950:デフォルトの名無しさん
18/09/14 00:17:52.55 lqNqtREE.net
>>934
/usr/bib/gccはちげーだろ

951:デフォルトの名無しさん
18/09/14 00:51:20.40 q3l06dS7.net
>>934
コンパイルは
/usr/lib/x86_64-linux-gnu/6/cc1
だな。俺の場合

952:デフォルトの名無しさん
18/09/14 00:58:32.39 fXySkelb.net
bash-4.3$ gcc -v -E -o aho_.c aho.c ←開始
/usr/lib/gcc/i586-slackware-linux/5.3.0/specs から spec を読み込んでいます
COLLECT_GCC=gcc
ターゲット: i586-slackware-linux
configure 設定: ../gcc-5.3.0/configure --prefix=/usr --libdir=/usr/lib --mandir
=/usr/man --infodir=/usr/info --enable-shared --enable-bootstrap --enable-langu
ages=ada,c,c++,fortran,go,java,lto,objc --enable-threads=posix --enable-checkin
g=release --enable-objc-gc --with-system-zlib --with-python-dir=/lib/python2.7/
site-packages --enable-libstdcxx-dual-abi --with-default-libstdcxx-abi=gcc4-com
patible --disable-libunwind-exceptions --enable-__cxa_atexit --enable-libssp --
enable-lto --disable-install-libiberty --with-gnu-ld --verbose --enable-java-ho
me --with-java-home=/usr/lib/jvm/jre --with-jvm-root-dir=/usr/lib/jvm --with-jv
m-jar-dir=/usr/lib/jvm/jvm-exports --with-arch-directory=i386 --with-antlr-jar=
/root/slackware-current/source/d/gcc/antlr-runtime-3.4.jar --enable-java-awt=gt
k --disable-gtktest --with-arch=i586 --target=i586-slackware-linux --build=i586
-slackware-linux --host=i586-slackware-linux
スレッドモデル: posix
(-続く-)

953:デフォルトの名無しさん
18/09/14 00:59:43.97 fXySkelb.net
(-続き-)
gcc バージョン 5.3.0 (GCC)
COLLECT_GCC_OPTIONS='-v' '-E' '-o' 'aho_.c' '-mtune=pentium' '-march=i586'
/usr/libexec/gcc/i586-slackware-linux/5.3.0/cc1 -E -quiet -v aho.c -o aho_.c -
mtune=pentium -march=i586
存在しないディレクトリ "/usr/lib/gcc/i586-slackware-linux/5.3.0/../../../../i58
6-slackware-linux/include" を無視します
#include "..." の探索はここから始まります:
#include <...> の探索はここから始まります:
/usr/lib/gcc/i586-slackware-linux/5.3.0/include
/usr/local/include
/usr/lib/gcc/i586-slackware-linux/5.3.0/include-fixed
/usr/include
探索リストの終わりです。
COMPILER_PATH=/usr/libexec/gcc/i586-slackware-linux/5.3.0/:/usr/libexec/gcc/i58
6-slackware-linux/5.3.0/:/usr/libexec/gcc/i586-slackware-linux/:/usr/lib/gcc/i5
86-slackware-linux/5.3.0/:/usr/lib/gcc/i586-slackware-linux/:/usr/lib/gcc/i586-
slackware-linux/5.3.0/../../../../i586-slackware-linux/bin/
LIBRARY_PATH=/usr/lib/gcc/i586-slackware-linux/5.3.0/:/usr/lib/gcc/i586-slackwa
re-linux/5.3.0/../../../../i586-slackware-linux/lib/:/usr/lib/gcc/i586-slackwar
e-linux/5.3.0/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-E' '-o' 'aho_.c' '-mtune=pentium' '-march=i586'
エラーなし

954:デフォルトの名無しさん
18/09/14 01:02:16.51 fXySkelb.net
プリプロセス前
bash-4.3$ cat aho.c
#include <stdio.h>
#define ahobaka "あほばか"
#define AHOBAKA aho##baka
#define LIT(str) #str
#define PRINT(f,...) fprintf(stdout, f, __VA_ARGS__)
#define SHINE PRINT("%s%s\n", AHOBAKA, LIT(a"b"c))
int main(void) {
SHINE;
return 0;
}
プリプロセス後
bash-4.3$ cat aho_.c
(-略-)
# 8 "aho.c"
int main(void) {
fprintf(
# 9 "aho.c" 3 4
stdout
# 9 "aho.c"
, "%s%s\n", "あほばか", "a\"b\"c");
return 0;
}

955:デフォルトの名無しさん
18/09/14 04:27:04.26 q3l06dS7.net
pcc(1)とかで試すとわかりやすいとおもう。

956:デフォルトの名無しさん
18/09/14 05:58:00.88 3Ef1q6jY.net
コンパイラが(プリプロセス済みの)ソースを処理する際、
直接にはアセンブリのソースに持っていかず、いったん中間言語に変換。
その中間言語の段階でも最適化を行ってから
アセンブリに変換してアセンブル・リンク。
……みたいな手順になってると聞いたことがある。
中間言語段階の中間ファイルを出力させることができるか知らんけど。
プリプロセッサ、コンパイラ、アセンブラ、リンカよりも
内部的な手順はむしろ増えてるのかも。

957:デフォルトの名無しさん
18/09/14 07:13:28.65 RUHHwTRx.net
>>941
実行時コンパイラ
URLリンク(ja.wikipedia.org)

958:デフォルトの名無しさん
18/09/14 08:36:29.54 SYmkUqRw.net
JITとなんの関係が?

959:デフォルトの名無しさん
18/09/14 08:49:57.91 q3l06dS7.net
>>941
>>924 の図に倣うなら
C言語の原稿
↓プリプロセッサ
マクロ・ヘッダファイルが展開された原稿
↓翻訳機1
中間言語(最適化済み)
↓翻訳機2
アセンブリ言語の原稿
↓アセンブラ
機械語
↓リンカ
実行可能ファイル
みたいなかんじかね。

960:デフォルトの名無しさん
18/09/14 09:12:54.86 d02sSTx1.net
昔 LSIゲームってあったでしょ
ああいうゲームをCで書いてパソコンで遊びたいんだけど
技術的な情報が不足してんだ 特に画面を動かす方法
そういうのどこで手に入るか分かる人いる? 教えてくださいヽ(^o^)丿

961:デフォルトの名無しさん
18/09/14 09:49:18.88 1qfFvEAu.net
cursesライブラリを使う

962:デフォルトの名無しさん
18/09/14 10:39:42.96 i1kWv4b4.net
CでGUIまでやりたいということか?
うーん・・・

963:デフォルトの名無しさん
18/09/14 12:08:50.95 9XnUq3uB.net
>>945
エスケープシーケンスで検索
とりあえず NetHack みたいので遊んでみたら

964:デフォルトの名無しさん
18/09/14 12:34:30.19 3Ef1q6jY.net
>>945 の言うLSIゲームってのが、
ドットマトリクスの汎用液晶パネルを使ったゲームじゃなくて、
ゲーム&ウォッチみたいな専用にデザインされた液晶のゲームだと
ちょいと変わってくるかもな。
大筋は同じだけど、少数のデカキャラ表示を点けたり消したり。

965:デフォルトの名無しさん
18/09/14 12:48:17.13 9XnUq3uB.net
イメージ伝えるためにLSIゲームと言うならドットマトリックスというよりゲームウォッチ式じゃないかな。
ただその趣旨は、簡易な操作と表示のゲームなんじゃないかと。
キャラクタ端末ゲームを知ればそっちに倒れるんじゃないかな?

966:デフォルトの名無しさん
18/09/14 12:53:46.05 /Lpq1ndz.net
>>945
画面表示はglut

967:デフォルトの名無しさん
18/09/14 13:39:29.18 GvbetZ+k.net
ゲームウォッチみたいなのってビットマップじゃないけど、表示する情報量どんくらいなんだろうね?
64bitくらい?

968:デフォルトの名無しさん
18/09/14 13:53:35.51 q3l06dS7.net
エスケープシーケンスの話が出たついでに質問なんだけど
コマンド名: エラーレベル: エラーメッセージ
↑こういう形式のエラーで、エラーレベルが赤や黄に色付けされてる場合があるんだけども
これってなにかライブラリがあるのかな。それとも各種アプリケーションが自力でやってんのかな。

969:デフォルトの名無しさん
18/09/14 14:03:35.51 xLMWwHO5.net
LSI-Cと聞いて飛んできました
懐かしい・・・

970:デフォルトの名無しさん
18/09/14 15:19:32.14 d02sSTx1.net
>>949
そうそう ああいう感じでやれないかなと思ってる
別に3Dとかじゃないし そんなに高度な技術情報が必要とも思えないんだけどな
APIを勉強すればある程度分かるかな?

971:デフォルトの名無しさん
18/09/14 15:37:28.55 GvbetZ+k.net
色付けはほぼ自前なんじゃないかねえ。単に制御文字挟むたけだからね。
端末にお絵かきするならローグでも使った伝統あるcursesで。

972:デフォルトの名無しさん
18/09/15 10:21:05.36 iTkubaya.net
>>955
URLリンク(www.orchid.co.jp)

973:デフォルトの名無しさん
18/09/15 10:24:40.59 RjcPqpvv.net
>>952
URLリンク(www.nintendo.co.jp)
>というのも、ゲーム&ウオッチで採用したチップは、電卓で使われているのと同じものだったんです。
>そもそも電卓のディスプレイのひとつの数字は7セグメントで表示されるようになっていまして・・・。
(略)
>72セグメントの表示が可能だったそのチップを使って『ボール』をつくったんです。

974:デフォルトの名無しさん
18/09/15 12:30:45.82 WJY+K2bP.net
>>958
面白いな
しかしゲームウォッチって、液晶上の配線の都合もあって配置がぐちゃぐちゃになってそうだから、ビットのON/OFFだけとは言え面倒そうだな

975:デフォルトの名無しさん
18/09/15 12:52:26.12 rgCMOp4r.net
コンピュータというほど抽象化もされてないんだろうね。
コントローラではあるけども。

976:デフォルトの名無しさん
18/09/15 12:53:38.17 iTkubaya.net
配線の都合で配置がぐちゃぐちゃ?

977:デフォルトの名無しさん
18/09/15 13:31:29.74 OUVvcRON.net
ゲームウオッチは知らんけど配線パターンの都合でビット配置が変則的になるとかはあるよ

978:デフォルトの名無しさん
18/09/15 18:43:35.47 8KftQgLD.net
蒸し返すようだが近代的な処理系でも,ビルドの各作業は分担して実行してると思っていいのね。
プリプロセッサで展開→中間言語に翻訳→アセンブリ言語に翻訳→機械語にアセンブラ→リンク

979:デフォルトの名無しさん
18/09/15 18:59:03.04 kl+My5NF.net
>>957
ありがとう すごい参考になった

980:デフォルトの名無しさん
18/09/16 06:08:26.07 QKaZz7Xi.net
>>963 そう考えて良いと思うよ。
ただし、各段階で実行されるツールが独立した実行ファイルか、とか
それぞれの段階で作られる中間状態をファイルとして取り出せるか、
という話なら「場合による」ってことになる。

981:デフォルトの名無しさん
18/09/16 23:54:07.55 ynEgKPZ+.net
>>965
ありがとうございます。

982:デフォルトの名無しさん
18/09/17 00:45:31.62 jghdaJ/O.net
save-tempsは割と使います

983:デフォルトの名無しさん
18/09/17 06:09:25.28 5TL9cO8s.net
gcc -save-temps -o prog prog.c
と指定すると prog.i, prog.s, prog.o が残るのね。
それでもプリプロセス済みCとアセンブリとの中間段階は見られないか。
ちなみに -save-temps と -pipe を同時に指定すると、
gcc: 警告: -save-temps が指定されたため、-pipe は無視されました
……ですってよ、奥様。

984:デフォルトの名無しさん
18/09/17 07:57:34.69 SBpxj18K.net
>>968
> それでもプリプロセス済みCとアセンブリとの中間段階は見られないか。
prog.iとprog.sが一体なんだと思ってるんだろう…

985:デフォルトの名無しさん
18/09/17 08:09:11.53 hbuTlOjm.net
プリプロセスとかアセンブリとかがあるとなんか困るの?
なんでそんなに必死なのか分からん。
処理が過度に複雑にならないためとか、様々な言語やCPUといった対象に幅広く対応するためとか、いろんな理由で工程を分ける方が合理的でしょうに。

986:デフォルトの名無しさん
18/09/17 08:13:06.60 BwzrWhGR.net
鉄鉱石とボーキサイトと石油入れたら自動車が出てくる装置があると思ってるんでしょ

987:968
18/09/17 08:27:18.66 5TL9cO8s.net
.i がプリプロセス済みのC
.s がアセンブリ
ということは分かってるのよ、それらの間にある状態を
ファイルとして見ることができないという話。
GCC用語ではGENERICの段階てことになるかな。
GENERICとアセンブリの間にもまだあるみたいだけど。

988:デフォルトの名無しさん
18/09/17 08:28:59.23 SBpxj18K.net
>>970
単なる技術的興味だろ
このスレでうだうだやるなよって言うのならわかるけど必死とか意味わからん

989:デフォルトの名無しさん
18/09/17 08:36:20.28 SBpxj18K.net
>>972
> それらの間にある状態を
> ファイルとして見ることができないという話。
gccならこの辺りを見ればいいんじゃね
URLリンク(code-examples.net)

990:デフォルトの名無しさん
18/09/17 09:14:28.38 z+cSzUXJ.net
TASMとTCCとTLINKにお世話になった20年前。

991:デフォルトの名無しさん
18/09/17 09:19:33.19 5TL9cO8s.net
>>974 ありがとう。
でもオプションの数を見ただけでウンザリしてもうた。
コンパイラ開発者向けのレベルになると最適化処理のステップごとなのね。

992:デフォルトの名無しさん
18/09/17 10:17:59.30 qtGPC3c9.net
-Eだろjk

993:デフォルトの名無しさん
18/09/17 11:58:09.09 5NB0QfSZ.net
たとえばpccなんかはものすごく外部コマンドにたよってるよね。
man pccとするとその解説が載ってる。

994:デフォルトの名無しさん
18/09/17 12:00:30.90 5NB0QfSZ.net
質問者はここを参照するといいかも
URLリンク(pcc.ludd.ltu.se)
ただ,PCCはGCCやらClangと違って小ささ,見通しのよさを重視してるから,
GCCとかClangとかはそんなことやってないかもしれん。
(ていうかGCCやClangにおける↑上のリンクみたいなドキュメントはないのかな)

995:デフォルトの名無しさん
18/09/18 20:12:09.59 2waW+Aqm.net
分かってて使こてたんちゃうん

996:デフォルトの名無しさん
18/09/19 05:40:46.68 6Ke1Nn09.net
C言語(じゃなくてもいいけど)をやってると
標準出力に出力するというのがいかに便利かを痛感するねぇ
下手にファイルやなんかに出力先を指定しようものなら一気に
パーミッションや属性値の問題が噴出するのに対して
標準出力ではそういう一切を気にせずに垂れ流せる

997:デフォルトの名無しさん
18/09/19 07:56:02.42 bRibFDbQ.net
C++の学習(入門レベル~初心者レベル)をするのにC言語の知識って必須なんですか?
読んでるC++入門書が途中から分かりづらかったので独習C++って入門書を買おうとしたんですけど
とあるレビューにC言語を習得してるのが望ましいとか書いてあって気になったんですが…
プログラミング言語自体経験皆無なのですが、どうすればいいでしょうか?

998:デフォルトの名無しさん
18/09/19 08:04:03.02 37LGoDD1.net
>>982
C++はCの大半の部分を包含したような言語仕様になっているから、必然的にCの知識も必要になってくる。本を書く方も、Cと重複するような内容まですべて書いてると膨大になってくるから、Cを知っている前提になっている本は多い。
C++の流儀でコーディングするなら使われないCなりの書き方とかもあるけど、基本的にはCは避けて通れないはず。
頑張ってCも身に付けるか、もっと初心者が取っつきやすい言語から始めた方がいいかも。

999:デフォルトの名無しさん
18/09/19 08:29:50.54 t41Iifgl.net
じゃあCの知識を前提にしてないC++の本探せば
やさしいC++とかでいいんじゃね

1000:デフォルトの名無しさん
18/09/19 08:47:40.49 OxeqQ4V7.net
全部やればいいと思うよ。pythonもlispも
C++の必要性を実感するのってプログラムが大規模になってからなので、最初はちょっとポイント絞るのが大変かもね

1001:デフォルトの名無しさん
18/09/19 10:31:35.10 bRibFDbQ.net
>>983
回答ありがとうございます
ロベールって本読んでたんですが(クラスの章で読むの中断)今の所特にC言語などの前提知識は
要求されてなかったんですが、これから必要になっていく感じですかね・・
具体的にはどれくらいC言語のスキルを付けてからC++に逝くのが望ましいですか?苦しんで覚えるC言語って本はざっと読んだんですがこれじゃ弱いですよね・・
.....それともCに拘らずに何かpythonとかrubyみたいな人気そうで簡単そうな言語で何か作れるくらいまで覚えてからC言語に戻ってきたほうが
一見遠回りのように見えて近道なんでしょうか?質問ばかりですいません;

1002:デフォルトの名無しさん
18/09/19 10:41:53.75 h/A1qpKl.net
ロベール読めないってマ?

1003:デフォルトの名無しさん
18/09/19 17:03:44.61 t41Iifgl.net
>プログラミング言語自体経験皆無なのですが
>クラスの章で読むの中断
>ざっと読んだんですがこれじゃ弱いですよね・・
C++にこだわる理由を知りたくなったw
そして読んでるだけ?手動かしてる?

1004:デフォルトの名無しさん
18/09/19 17:18:24.07 5wa+YDhW.net
俺が禿1stを読み始めた当時も大した理由はなかったな
なんだか凄そう、その程度のことだった

1005:さまよえる蟻人間
18/09/19 17:29:55.07 hbV0PURz.net
次スレ頼む。

1006:デフォルトの名無しさん
18/09/19 17:57:48.07 XSTNMnDw.net
次スレ
C言語なら俺に聞け 148
スレリンク(tech板)

1007:デフォルトの名無しさん
18/09/19 20:24:47.33 nVz8f0fv.net
今から覚えるならcはやってもc++はやらんでも良いと思うわ

1008:デフォルトの名無しさん
18/09/19 20:27:17.70 9wwh2JnW.net
C++は拡張が酷すぎると思う

1009:デフォルトの名無しさん
18/09/19 22:45:11.03 +Hv0QgVJ.net
Cの拡張の無さの方がひどい

1010:デフォルトの名無しさん
18/09/19 22:48:46.48 xLP4ypV2.net
むしろ昔はC++のコードからCのコードを出力してたからな
Cは拡張性は抜群
ウンコスクリプトもCで書かれてる
C以外の言語が淘汰されることがあっても
Cが淘汰されることはない

1011:デフォルトの名無しさん
18/09/19 23:00:14.31 XIk0tg++.net
C++で作っていいのは継続的な開発がない場合だけだな
継続的に開発やメンテナンスをするならC++は使っちゃいかん

1012:デフォルトの名無しさん
18/09/20 02:32:23.68 v2140bTt.net
>>988
動かしてます。書きながらやってます
理由はあれですが最終的にC#とC++使いこなせるようになりたいです
他の簡単な言語やるとしたらどれくらいのまでスキルあげればいいんですかね・・

1013:デフォルトの名無しさん
18/09/20 02:59:01.53 OZxd0eW0.net
たのしいRuby 第5版、2016
Effective Ruby、2015
さらに、JavaScript, jQuery をやっても、
C++ の1冊よりも、はるかに簡単だろ
C++ を読んでも、何も作れないし、長時間のムダ!

1014:デフォルトの名無しさん
18/09/20 03:28:24.58 90KUJ2ts.net
>>997
C#とC++やりたいなら、まずはC#から入った方が良さそう。
rubyは全く方向性が違うし今(そしてこれからも)やる必要はない。

1015:デフォルトの名無しさん
18/09/20 03:52:33.79 v2140bTt.net


1016: rel="noopener noreferrer" target="_blank" class="reply_link">>>998-999 ありがとうございます C#からやったほうがいい理由も教えていただきたいところですが1000レス目ですね… RubyもやってみたいんですがViisualSの導入出来てるのでそれで動くC#からやってみます C言語から脱線してしまいすいませんでした



1017:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 34日 4時間 16分 31秒

1018:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch