C言語なら俺に聞け 147at TECH
C言語なら俺に聞け 147 - 暇つぶし2ch643:デフォルトの名無しさん
18/09/02 16:48:06.49 owKXNyzr.net
>>628
君が思っているほど言語間の差異はないよ。
とはいえ、本気でコンピューターについて学ぶのならCは外せない。
最初からやる必要があるとは思わないが、それも含めて自由にすればいい。
最初はスクリプト言語(Ruby/Python/JavaScript)の方が上達は速いとは思うが。
>>627
> ggってみたところconstはその重要性の割に実務で使われていない傾向にあるみたいですね。
constもある意味宗教だからね。
使われてない理由は、単に、苦労に見合う結果を得られないからだよ。
Cに関してはconstを積極的に付ける理由もないからね。
C++は参照を導入したからconstを付けないと変更されるかどうかが分かりにくくなった。
Cだとポインタなら変更される(可能性がある)、そうでないなら変更されないと文法的に確定している。
だからgoogleは参照はconst以外禁止、というルールでC相当にしている。
C#では明示的にoutと書いて分かりやすくしている。
constを付けたことによるメリットは、constに対して代入したときにコンパイルエラーになることだが、
そもそもこれがないんだよ。constなんて間違う場所に使うものではない。
(ただし俺はCでストリング操作を積極的にやったことはないので、char*に関しては分からん。
>>629が引っかかっているのもそこだろうし。
とはいえ、世の中はstringはimmutableということでほぼ確定してしまったし、
今更mutableなstringの作法について学ぶ必要もないはずだが)

644:デフォルトの名無しさん
18/09/02 17:06:32.38 4Jf6YH6e.net
>>633
まず、エミュレータを作ります。

645:
18/09/02 17:48:53.86 oSO4LvdH.net
>>626
>君が何の為にCを学ぶのかは知らないが、もっと直接的にその結果を目指すべきだ。
>とりあえず学ぼう、では全く上達しないんだよ。
うーん、これは非常にいい指摘ですね
私は、これに気が付くのにずいぶんと遅くなってしまいました

646:デフォルトの名無しさん
18/09/02 18:34:07.99 5WqNet32.net
素人は技術もないのに、登山で直線的に、絶壁を登ろうとするから失敗する。
勉強のプロは、斜めに進んでいくから、登れる
素人がすぐに思いつくような、直線的な方法をやってもダメ。
全員が失敗してる。
C の授業を受けた、ほとんどの大学生が、こんな授業は無駄・役に立たないと言ってるw
彼らはなぜ、そう言うのか、理由を考えたらよい
C のようなポインタのある言語を、1年勉強しても、
ポインタを追っかけるだけで時間がつぶれるから、何も作れない
その時間で、Ruby/Python/JavaScript の3つの動的言語をやれば、ツールを作れる
まず素人は、動的言語・静的言語・ポインタのある言語の、
位置付けや難易度をわかっていない

647:デフォルトの名無しさん
18/09/02 18:36:32.73 xLyKs+8r.net
ポインタってそんなに難しいか?

648:
18/09/02 18:46:30.43 oSO4LvdH.net
>>638
難しいと思います
C++ に移ってからも、T ** を T *& に書き直すとかする段階で、自分のポインタ概念の認識が浅かったことを実感させられたりしたものです

649:デフォルトの名無しさん
18/09/02 19:00:28.56 zPdaUXCQ.net
Cのポインタはシンプルだからわかりやすいと思います
ビット演算のほうが難しいと思います
m = (m & 052525) + ((m & 0125252) >> 1);
m = (m & 031463) + ((m & 0146314) >> 2);
m = (m & 007417) + ((m & 0170360) >> 4);
m = (m & 000377) + ((m & 0177400) >> 8);

650:デフォルトの名無しさん
18/09/02 19:30:02.62 nnaQ2akS.net
>>640
8進数表記って滅多に使わないから、たまに良かれと思って桁合わせでゼロパディングすると意図せず8進数になって悩むよな。

651:デフォルトの名無しさん
18/09/02 19:43:35.59 4Jf6YH6e.net
>>641
あ、それ、30年ぐらい前にハマった。
幸い8や9を使っている所でコンパイルエラーになったからよかったが(それでも当初はなんでエラーになるのかと悩んだがw)、もし使ってなかったらROMに焼いてからターゲットマシンで変な動きになって悩み続けた事だろう。

652:デフォルトの名無しさん
18/09/02 22:38:57.74 u9h+2eE3.net
Cが全盛だった時代


653:、否が応でもプログラミングの勉強はCから始めた。 昔の人は理解できて今の人には難しいと考えるのは傲慢ではなかろうか。 ところでアンサイクロペディアのC言語の項が18禁になってるのは全部椋田のせいだな。



654:デフォルトの名無しさん
18/09/02 23:21:32.95 owKXNyzr.net
>>643
> 昔の人は理解できて今の人には難しいと考えるのは傲慢ではなかろうか。
いや事実だ。理由は単純で、つまりは裾野が広がっているだけなのだが、以下。
1. C言語の難易度自体は昔と同じだが、C言語の問題点を修正したより簡単な言語が開発された。
2. 昔プログラミングをしてたのは理系の大学生/大卒だけだった。
 今は文系も含め、しかも中高生から始めようとしている。
 数学で培われる論理/抽象思考能力はプログラミングに不可欠なのだが、
 これらがまだ整っていない状態の中高生や文系にプログラミングを教えるってのがそもそもの間違い。
どのみち今の状況で計算機科学専攻ならCは必修だろうし、そういう連中には問題ない。
ただ、そうじゃない連中がCをやる必要はないってこと。
Pythonだけで済む世界ならそれもありだ。

655:デフォルトの名無しさん
18/09/03 00:24:24.13 gEsVL0BV.net
昔も中高生の頃からプログラミングは始めていたけどな
いわゆるベーマガ世代の年齢層がBASIC やアセンブラからC言語に流入してたので平均的レベルは比較的高かったように思う

656:デフォルトの名無しさん
18/09/03 00:32:54.22 4uYLlRfz.net
処理目的の抽象度が上がっているという現実もあるからなぁ

657:デフォルトの名無しさん
18/09/03 00:35:18.97 wBpew+1c.net
プログラミングの学習は、最初電卓でやってた
ニーモニックが16進表示みたいなやつだったな
それで、ループや分岐、サブルーチンを覚えた
その後は、Z80のアセンブラに移ったっけ
高級言語やりたかったけど、
8ビットのプアなPCしか持ってなかったし
漢字モア使えないPCで漢字ROM買って取付け
漢字非対応のドットインパクトプリンタに
機械語プログラム使って漢字出力してた

658:デフォルトの名無しさん
18/09/03 01:05:18.32 co6OAOoM.net
>>645
ベーマガやってた連中はごく一部なのだから一般化するのは無理がある。
そしてそれに対応する連中は、今はもっと増えている。
家にPCがあるのが当たり前の時代だし、IDEも無料、
インターネットでOSSのソース見放題、質問も出来る。
昔の大学生も、大学で初めてプログラミングした連中はCで撃沈してた。
今は昔と比べてIDE等の環境が断然良くなっているが、
大学生の割合が増えた分、大学生の平均的頭は悪くなっている。
(昔は上位1/4が大学生だったが、今は上位1/2で、東京に至っては2/3じゃなかったっけ?
昔だと当然高卒だった連中が大学に行ってるのだから、Fランでは授業が成立しないのも当然)
だから今の「平均的大学生」が大学でプログラミングを始めても、当然Cでは撃沈する。
今の「上位半分の大学=国公立+有名どころ」(=昔の上位1/4の頃の大学生相当)の理系で、
昔の大学生と同様にCで撃沈するはず。
それを文系含めて全員プログラミングをやらせようってのだからかなり無理がある。
とはいえ、個人差の方が大きいし、やるのは自由だ。
ただ、もっといい言語(改良された言語)は沢山あるのだから、無理してCに拘る必要はない。
情報/計算機系はどうしても速度勝負になるから、どのみちCは外せないが。

659:デフォルトの名無しさん
18/09/03 01:20:48.33 kJOKS5+S.net
今の平均的な大学生のレベル低下はゆとり教育の弊害だと思うが

660:デフォルトの名無しさん
18/09/03 01:38:17.54 y7r/YW4w.net
URLリンク(ja.m.wikipedia.org)
ゆとり教育(ゆとりきょういく)とは、日本において、1980年度(狭義では2002年度以降)から2010年代初期まで実施されていたゆとりある学校を目指した教育のことである。
1980年度から2010年代初期
1980年度から2010年代初期
1980年度から2010年代初期
1980年度から2010年代初期
1980年度から2010年代初期

661:デフォルトの名無しさん
18/09/03 01:45:48.17 dM1zEtwp.net
アセンブラ(マシン語)からやったほうが
イメージしやすいと思うんだけどな。ポインタ周りとか
現代はPythonやC#が潰しが利くから昔でいうCの位置かな
URLリンク(cpplover.blogspot.com)

662:デフォルトの名無しさん
18/09/03 02:48:03.81 WkDP4f9E.net
みなさんほんとうに色々な助言ありがとうございます。
目的はなにかといいますと,ゲームを作りたいのではなく,むしろ計算機の仕組みなどを学びたいと思っています。
やっぱり始めはPythonのほうがいいんですかね……。
(ちなみにガッツりゆとり世代です。中学あたりで土曜日通学が復活したかな?)

663:デフォルトの名無しさん
18/09/03 05:37:12.02 WkDP4f9E.net
調べただけですがRustもよさげですね。私が学びたいと思っている計算機の基礎的な部分に触れられると同時に
C99では非常に複雑で非本質的な努力を要求される,安全なメモリ管理やUnicodeに対応した文字列操作が
簡単に実現できるというのは魅力的です。また,Mozilla社が主導しているというのも好印象です。
難点は,かなり新規の言語なので,Cほど開発手法が洗練されておらず,
またコンパイラの実装が一つしかないことですかね。
しかし開発版ながらRust製のOSもあるようですし,私がCを通じて得たいなと思っていた知見や概念を
Cほど紆余曲折を経ずに取得できそうです。(学問に王道なしとは言いますがね……)
これ以上は(というか既に大分)スレチになってしまうので書き込むのはやめます
青二才に貴重な時間を割いて様々な助言を頂いたこと,ほんとうに感謝しています。

664:デフォルトの名無しさん
18/09/03 07:47:15.40 Sux6qqaT.net
別にCでいいと思うよ。
ただ何使うにしても、画面表示とかができないとモチベーション上がらないかもね。
GUIとまではいかなくてもコンソール上にテキストで簡易グラフィックくらいやらないと、動いてる様を眺める楽しみが半減だ。
エスケープシーケンスとかを一緒に勉強するといいかもな。
とりあえずライフゲームでも作って眺めてみたら。

665:デフォルトの名無しさん
18/09/03 08:01:08.87 gEsVL0BV.net
まあ手っ取り早くプログラミング全般を眺めるならマルチパラダイムの言語を最初に学ぶのも悪くはないと思うよ
手続き型、オブジェクト指向、関数型のマルチパラダイムなら、他にはC#やJavaScriptなどが環境が充実してるので手軽ではあるけどね

666:デフォルトの名無しさん
18/09/03 08:20:45.29 /AUwjj56.net
計算機の仕組み、つまりコンピュータの動作原理を学ぶならアセンブラだろうけど、普通のOSのAPIはCなので、やっぱりC言語を勉強するのはベストプラクティスだろうね。
PythonだったりC#だったりはプログラミングは習得できても動作原理は深く学べない。
果たしてC#等の高級言語しか使えない人の何割が割り込みやCPU動作モードやSFRについて正確に理解してるのやら。

667:デフォルトの名無しさん
18/09/03 08:30:03.31 4uYLlRfz.net
>>653
Rustの方が細かなノウハウでコケずにコンパイラが指摘してくれるというのはあるが今の目的ならCの方が素直でいいと思う
実機の動きを追える上に色々な機能が付いていて嬉しいという言語なので覚える事が滅茶苦茶多いよ

668:デフォルトの名無しさん
18/09/03 09:18:58.58 co6OAOoM.net
>>652
中高生なら学校の勉強しとけ。結果的にそっちの方が近道だから。
プログラミングは抽象思考が出来て自分でサイクルを回せる奴しか上達しない。
具体的に言うと、「○○→△△って事は●●→▲▲ってことだろ。
ならここをこう改造すればこうなるはず…ビンゴだぜ!俺って頭イー」
を『自分だけ』で勝手に繰り返せる奴だ。(β)
学校の教科でこれに最も近いのは物理で、次点で数学だ。
だからこのタイプの奴は物理と数学は『本人は特に努力した覚えが無くとも』無双出来る。
逆に言えば、そうなっていない奴は本質的にプログラミングに向いてない。
その場合は、そもそもプログラミングをやるべきではないと俺は思っているが、
それでもやるのなら、まず物理と数学の『勉強の仕方』を変えて『抽象思考』を身につけるべきだ。
(単に勉強するだけなら『暗記』でも一定まではカバー出来てしまうが、それでは意味がない)
プログラミングを始める前に、プログラミングが上達する基礎能力としての抽象思考を身につけないといけない。
次に、既にこれが出来ていたとすると、
教科自体の内容はプログラミングには直接は関係ないから、中高生でも出来るのは事実だ。
(ここら辺のことをわきまえず、『中高生でも出来る』とだけ見て全員に教えようとしてるから問題がある。
とはいえ、主導している馬鹿共はプログラミングが出来ない連中だから、話が通じないのも当然だが)
仮に君がここまでは到達しているとして、話を進めると、以下になる。
> むしろ計算機の仕組みなどを学びたい
現状、C以外に選択肢はない。
> Rust
止めとけ。今のRustはプログラミング初心者用には出来てない。C以上に確実に撃沈する。
> Python
海外では「関数呼び出し、ループ、条件分岐」等の基礎の基礎を学ぶのなら一番早いと言われている。
現実的にはAWK/Perl/Ruby/JavaScript等いわゆるスクリプト言語全般は全てこれに当てはまるが。
ただ、上記の「プログラミングが上達出来る奴」ならこの部分は数日~数週間で通過してしまう為、
言うほど関係ない。「初心者ならどの言語でも同じ」とよく言われているのはこれ。

669:デフォルトの名無しさん
18/09/03 09:19:38.61 co6OAOoM.net
例えば体育、運動神経のいい奴は何をやってもそこそこ上手いし、一瞬で上達するだろ。
あれと同じで、「プログラミング神経」のいい奴はどの言語でも上手く行くし、すぐ上達するんだよ。
だから言語自体よりは「プログラミング神経」としての『抽象思考』能力の方が重要なんだよ。
そしてそれがない奴が頑張ってみたところで、
ちょっと運動神経のいいやつが遊びでやってるのを見たらスゲー上手くて萎える、みたいなことになる。
だから本当は基礎能力としての抽象思考を鍛えることが重要で、プログラミングの上達はその結果にすぎない。
そこを「プログラミングを『教えれば』上達する」と勘違いしている馬鹿が色々やろうとしてるからおかしなことになってる。
『教えれば』上達するのは暗記科目であって、
上達する状況を整えた上で『勝手にやらせる』と自然と上達するのが非暗記科目だ。
で、言っちゃ悪いが君は多分「抽象思考」型ではなく、「暗記」型だ。enumして全潰しというのがそれ。
君は本質的にプログラミングに向いてないタイプだと思うぞ。
教科の延長でプログラミングを学びたいと思ってるのなら止めとけ。
上記(β)タイプは主に一点突破で、むしろ勝手に突っ込んでいって自爆するのが多い。
最近出てきたのはGateboxだが、いい感じに突き抜けてるだろ。
URLリンク(gatebox.ai)
URLリンク(www.itmedia.co.jp)
こういうことを平気で出来る奴じゃないと上達しない。
君にはその臭いを感じない。

670:デフォルトの名無しさん
18/09/03 09:45:55.75 XmaAZlOW.net
URLリンク(ja.m.wikipedia.org)
ゆとり世代
ゆとり世代(ゆとりせだい)とは、ゆとり教育(ゆとりきょういく)を受けた世代のこと。
定義・範囲
ゆとり世代については明確な定義、範囲はなく諸説ある。
・小中学校において2002年度施行(高等学校は2003年度)の学習指導要領による教育を受けた世代(1987年4月2日 - 2004年4月1日生まれ)。
・小中学校において1980年度以降(高等学校は1982年度以降)の学習指導要領による教育を受けた世代。1966年度生まれ以降。

671:デフォルトの名無しさん
18/09/03 09:58:26.53 udP6IpNT.net
やっぱりプログラミングより数学の勉強の方が全然大事だと思うわ
無駄な時間を過ごしたおっさんの後悔からの発言だけど
若者は線形代数と物理いっぱいやった方がいいよ

672:デフォルトの名無しさん
18/09/03 11:14:17.43 sjKCXLyo.net
BIOSの割り込みサービスで画面に文字表示するやつよんだらどうなりますか?

673:デフォルトの名無しさん
18/09/03 11:36:38.73 CjQwreEv.net
>>653
これでも買っとけ
70年代のTRPGの生の感触がばりばり伝わってくるAD&Dの本
コンパイラ―原理・技法・ツール (Information & Computing) | A.V. エイホ, R. セシィ, J.D. ウルマン, M.S. ラム, Alfred V. Aho, Jeffery D. Ullman, Ravi Sethi, Monica S. Lam, 原田 賢一 |本 | 通販 | Amazon
URLリンク(www.amazon.co.jp)

674:デフォルトの名無しさん
18/09/03 13:23:16.40 G6xL0gpW.net
これは表紙買いしてしまう

675:デフォルトの名無しさん
18/09/03 17:00:11.86 fBv9u5Bm.net
>>618
> そういう文法的になことには今は拘らない方がいい。
臭い物に蓋してんじゃねえ
無理に気になる必要はなくても
気になったのに誤魔化せって最低なアドバイスだ
学問そのものを全否定する暴論だ

676:デフォルトの名無しさん
18/09/03 17:42:03.71 kgEYN356.net
そんなに気になるならコンパイラを読めば良い
コンパイラを読まずにああだこうだと言ってそれを学問と言い張るのは今更ニーチェを読んで学問と言い張っているのと似ている

677:デフォルトの名無しさん
18/09/03 18:03:25.66 bm6csMD2.net
ゲームブックの訳本かしら

678:デフォルトの名無しさん
18/09/03 18:07:52.25 fBv9u5Bm.net
しどろもどろの典型だな

679:デフォルトの名無しさん
18/09/03 18:26:17.33 ttVcJTrG.net
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006
この本は、日本の大企業から、C の専門家が数十人集まって作った。
この100ルールまで行かないと、教えられない
汎整数拡張・副作用完了点・短絡評価・bool とか、各概念が難しい。
とても初心者に教えられない
特に学生なんて、現実を知らないから、文法があっていれば正しいと思う、
固定概念があるから成長できない
現実には、MISRA-C、100ルールに従わないと話にならない。
学生にはそういう事はわからないから、アホみたいなコードを書く
コードは、正しい文法で書いても、ダメだから。
可読性・保守性・バグを起こさない、Ruby みたいなコーディングが大切
だから、Rubyでプログラミング学ぶのが大切。
学ぶのは文法規則じゃない!
システムを作る・保守するためのプログラミング!

680:669
18/09/03 18:34:29.69 ttVcJTrG.net
Ruby の女神・女優の池澤あやかも、同じことを言ってる。
慶応大学卒だけど、大学で、C の授業は無意味だって
山陰地方のRuby合宿へ行って、webアプリが作れるようになった
Cの開発時間の大半が、ポインタ・バグでつぶれるから、プログラミングを学べない。
文法がわかるだけで、ものを作れないから楽しくない
だから、Cの授業の評判が悪い。
無意味な授業だよなって
だから初心者は、Rubyから初めて、まず動くものを作る

681:デフォルトの名無しさん
18/09/03 18:58:25.85 LFbByM25.net
最初の質問者は計算機の仕組みを知りたいのであってWebアプリを作りたいわけでもMISRA Cルールを知りたいわけでもない件

682:デフォルトの名無しさん
18/09/03 20:30:15.22 E2St7m4+.net
典型的な超頭悪そうなヤツラが
ひたすら長文連投してる

683:デフォルトの名無しさん
18/09/03 20:31:53.98 zLYH5Np3.net
>>670
またrubyガイジかよ。Cスレにまで出張ってくるななよ

684:デフォルトの名無しさん
18/09/03 20:35:14.84 i7qE7EE1.net
>>672
そのまんまお前の事だ

685:デフォルトの名無しさん
18/09/03 21:07:08.36 e7RcTinN.net
>>674
???

686:デフォルトの名無しさん
18/09/03 21:32:03.32 i7qE7EE1.net
半角バカを知らないのか

687:デフォルトの名無しさん
18/09/03 23:39:43.07 e7RcTinN.net
あいつか

688:デフォルトの名無しさん
18/09/04 00:25:08.00 Ilbb7rlr.net
とりあえずPCCでも読んでみることにします。

689:デフォルトの名無しさん
18/09/04 00:45:19.60 LzYZ2uc7.net
Cのスレに不毛な喧嘩売ってくるのは大体Cで挫折して、
劣等感を何とか慰めようとするカーミング行動だから気にするな

690:デフォルトの名無しさん
18/09/04 00:47:45.68 oF8LgJEj.net
>>669的にはコンピュータのしくみはどうでもいいってこと?

691:デフォルトの名無しさん
18/09/04 06:21:50.26 4a01gUXa.net
>>663 にある本の紹介文なのか宣伝コピーなのか、
「70年代のTRPGの生の感触がばりばり伝わってくるAD&Dの本」て部分を
どう解釈したら良いのか分からないのだ。
Cや「ドラゴン・ブック」、TRPG, AD&D って言葉くらいは知ってる者に
解題してくれないか。
ひどく野暮な質問かも知れないけど、聞くは一時の恥とか言うし、敢えて頼む。

692:デフォルトの名無しさん
18/09/04 08:45:47.28 HIB3dDVe.net
>むしろ計算機の仕組みなどを学びたいと思っています。
それなら情報処理の基礎なんかをやった方が良い様な気がする
今は基本情報処理とか言うんだっけか?
資格とかのやつよ

693:デフォルトの名無しさん
18/09/04 14:29:38.61 Ilbb7rlr.net
向いてないっすか……。正直物理や数学は得意なほうなんですがね……。

694:デフォルトの名無しさん
18/09/04 14:48:39.41 0ItemGYT.net
>>683
高齢者はマウンティングする病にかかりがちなので気にすんなよ

695:デフォルトの名無しさん
18/09/04 15:15:50.63 FJBPHmlL.net
>>653
武内覚さんのLinuxの仕組み片手にCやるのがおすすめ
ファイルIOとかなら、システムコール、VFS、FS、Raid、デバドラ、スケジューラー、SCSiまでユーザーランドからデバイスまで一貫して、かつお手軽に触れる

696:デフォルトの名無しさん
18/09/04 16:39:04.23 gZnu4stV.net
cの文法で書けるだけの
無能を自覚できてない低学歴知恵遅れの高齢底辺ITどかたに多い

697:デフォルトの名無しさん
18/09/04 17:30:33.56 DgdW8Zal.net
お。半角文字の入ってない書き込みを久しぶりに見たような気がする。

698:デフォルトの名無しさん
18/09/04 17:53:50.88 gZnu4stV.net
底辺ITドカタさんたちは
今日みたいな台風の日も自宅待機ではなく
出勤でしたか
大変でしたね

699:デフォルトの名無しさん
18/09/04 18:52:18.48 Yl2cIsi8.net
台風で東海道線や環状線が止まるのはまあ想定内だったが阪急や京阪まで止まるのは想定外だったわ

700:デフォルトの名無しさん
18/09/04 20:17:15.30 tpLBdVu4.net
>>683
数学が得意なら諦めるのはまだ早い

701:デフォルトの名無しさん
18/09/04 20:22:39.67 GSpvNdv5.net
やっぱワンチップマイコンでアセンブラがいいよ。
クリスマスに向けてLEDチカチカさせてジングルベルでも鳴らしてみるとかどうよ。

702:デフォルトの名無しさん
18/09/04 20:27:34.18 bz6n3SY3.net
ジングルベルはJasracフリーだな、心配ない

703:デフォルトの名無しさん
18/09/04 21:12:38.21 nrC4An0b.net
ロジアナがあればベストだが無ければせめてオシロは欲しいな

704:デフォルトの名無しさん
18/09/04 21:54:25.98 Uy+TuYSZ.net
>>683
向いていないね。それは臭いから分かる。お前は本当の「天然」ではない。
以下参考だが、結局中身は同じだ。
> 一撃必殺!急にマンガ家だの声優だの絵師だのになりたいと言い出した子どもや大人を止める、オススメの方法
> URLリンク(togetter.com)
今はプログラミングなんて本当に簡単に始められる。そのレベルでグダグダ質問している時点で向いてない。
本当の「天然」なら、もう既にとりあえず何かしらのコードを書いてる。
お前は勉強しないと何も出来ないと考えている「いい子ちゃん」タイプだ。
そういう奴は自分でサイクルを回せず(=暴走出来ない)、上手くなれない。
無理してプログラマになっても、後輩に簡単に抜かれ、馬鹿にされる、悲惨な人生になるぞ。止めとけ。
(ここ見るだけでも老害を馬鹿にしたがっている奴はいくらでもいるのが分かるだろ)
ベーマガ世代だって理解してやっていたわけではない。やりたくてやってただけだ。
先に数学をやった方が効率が良かったはずだが、そんな事は考えてもいない。
お前は、サッカーをやる前に、筋トレして体幹も作り上げ、万全の状態にしようとしている。
勿論そういうのもありだが、それはやはり「養殖」なんだよ。
「天然」はそうじゃない。サッカーをしながら、もっと上手くなりたいから筋トレして体幹も作っていく。
好きだから続けられるし、環境が多少酷くても我慢出来る。(これがIT産業がブラック化しやすい遠因にもなってる)
そういう「天然」向け仕様の環境で、「養殖」では悲惨なことになる。
(勿論、プログラミングをやってみてから好きになる、というのもありだが、それはかなり少数派だと思う)
向いてる/向いてないで言えば、
ちょっとコードを書けるようになって調子に乗ってここで俺ツエーしている馬鹿共の方が向いてると言える。

705:デフォルトの名無しさん
18/09/04 21:55:26.59 Uy+TuYSZ.net
今はプログラミングの裾野が広がって、絶対的な人数が全く足りてない。
だから文系をSEとして大量投入してみたものの、いい結果がでたとは言いがたい状況だ。
それで次は「小学生からプログラミングを教える」「国民全員がプログラミング出来るように」
みたいなアホなことをやろうとしているのだが、これは完全に愚策だ。
プログラミング出来ない/したこと無い奴らが仕切ってるからおかしなことになってる。
それにお前がつき合う必要はない。
教育改革ってのは取り返しが付かない人体実験になるから、性急にやっては駄目なんだ。
この認識すらなくゆとり教育を導入した文化省の連中は、
今からでも全員死刑に処すべきだと俺は思っている。
(それくらい罪深いし、社会に対して悪影響を及ぼしている。日本はミスリードに甘すぎだ)
今の「小学生からプログラミング」についてはどうやらお遊び程度だからまあいい。
やるにしても当初はこの程度で様子見しながら拡大するか取りやめるか試すべきなのさ。
(俺は意味無いから止めろと思っているが)
今時PCもスマホもない家なんて珍しいだろ。
なら初心者用のプログラミング環境はすぐに整えられるし、勝手に始められる。
だからそのレベルでこんな所に質問してる時点で間違ってる。
天然:何故プログラミングをするのか?そこにPCがあるからだ (単にいじくり回したいだけ)
幼稚園児:ケーキ屋さんになりたい!(だってケーキ大好きだしもっと食べたいから)
お前には幼稚園児が「ケーキ屋さんになりたい!だってお金儲かるし!」
みたいな事を言っている違和感がある。
初心者の癖に計画しすぎだ。必要があって否応なしに始めるわけでも無し、意味不明すぎる。
そういう奴も中にはいるのかもしれないけどさ。
ただ、確実に言えるのは、プログラミング界隈は良くも悪くも全般的にギーク向けに出来上がってる。
お前がギークになりきれないのなら、ずっとアウェイのままだ。
それは幸せなことではないと思うよ。

706:デフォルトの名無しさん
18/09/04 22:38:39.94 l07xjkBV.net
おいら頭悪いから長い文章よめねんだ

707:デフォルトの名無しさん
18/09/04 22:49:40.55 CWUYudxX.net
今北産業

708:デフォルトの名無しさん
18/09/04 23:00:09.15 8Afhx4Yo.net
>>696
周りに迷惑かけない分、頭の悪い長文書く奴より立派だから安心しよう

709:デフォルトの名無しさん
18/09/04 23:14:17.99 gZnu4stV.net
オレみたいに的確に要点をまとめてる長文なら読める
低学歴知恵遅れの長文は読めるシロモノじゃないからな
文章だけで低学歴知恵遅れかどうかは
簡単に判別できる
このスレに連投されてる長文の駄文は
低学歴知恵遅れが記述したと推認することに疑いの余地がない

710:デフォルトの名無しさん
18/09/04 23:17:12.74 Yl2cIsi8.net
必要なら数学の知識などなくても感覚で覚えるからな
座標計算の必要があれば三角関数など知らない小中学生でもsinやcosくらいは使う

711:
18/09/04 23:26:47.20 lJV/Mb/R.net
>>700
小中学生に三角関数は無理でしょう…まず相似の概念を習うのが中学2~3年くらいなのでは?

712:デフォルトの名無しさん
18/09/04 23:31:24.63 dqoEXQdt.net
数学は教科書で勉強しないとあかんよ
経験で得た知識なんてただの思いこみ

713:デフォルトの名無しさん
18/09/04 23:46:19.73 Yl2cIsi8.net
思い込みでも何でも使っているうちに覚える
自分の場合は30年以上前中学生の頃に画像処理のプログラミングしている間に三角関数(といってもX座標はcos、Y座標はsinといった程度)や
論理演算(RGBの合成はOR、反転はXORなど)を覚えた
その後になって高校の頃に教科書でまともに学んだ覚えがある

714:デフォルトの名無しさん
18/09/05 00:03:44.17 ElSUubWJ.net
>>701
三角関数が何なのかは分からなくても、sin と cos を使うだけなら小学生でも定型文的に覚えちゃうんじゃね(おれは中学の頃だったが)。
円を描くところから始まり、直径を変化させると渦巻きにできたり位相や周期を変えて橢円やらリサージュになることに気付いたりで、
パラメータをやみくもに変えて手探りで欲しい結果にたどり着くようになる。
もちろん円的な動きの元ネタは必要で、ベーマガみたいなののコードをパクって出発だな。
小学生の頃はファミリーベーシックだったので三角関数には行き着かず、中学生でMSXになって三角関数に出会ったが、小学生の頃にMSXがあれば手を出してたと思う。

715:デフォルトの名無しさん
18/09/05 00:11:58.72 ElSUubWJ.net
そういや小学生のころはスーパーマリオが出たころで、ファイアバーをどうしても再現したくてファミリーベーシックで頑張ってたわ。
三角関数に行きついてないから、角度の範囲毎の動きを個別に書いたな。
でも長さが伸び縮みしたり軌跡がカクカクで、結局将来の夢に据えてお仕舞いにしたw

716:デフォルトの名無しさん
18/09/05 00:29:02.76 TND9Xsam.net
ニュー速で話題にしていた、CLA Fortran プログラムですが、
C言語への移植が終わりました。
公開方法について、検討しています。
↓ここを使おう蚊と考えています。
URLリンク(ideone.com)
C言語へ書き換えたソースと、入力用データとパラメータの3つですが
入力用データとパラメータについては、サンプルに掲載したものと同一
なので公開は必要ないかも知れません。
ただし実行するには必要になります。どうしましょうか?
テキストファイル形式で単独でアップロードするか、
ソースの一番下にコメントとして載せるかどの方法が良いでしょうか?
あと、オリジナルFortranソースもアップロードした方が良いですか?
これは以前PDFを見つけてくれた方がソースに起こして頂いたものです。

717:デフォルトの名無しさん
18/09/05 00:29:27.46 TND9Xsam.net
間違えました、済みません。

718:デフォルトの名無しさん
18/09/05 00:56:31.50 8BhrS90z.net
>>694
>>695
よくわからんのだが、お前が相手をしてるそいつはなぜプログラミングを初めたいと思ってると思ってる?
よくわからんのだが、ギークとかなんやらの最初とそいつの最初の具体的な差がよく分からん

719:デフォルトの名無しさん
18/09/05 07:35:22.74 p5l66rRv.net
C言語ポインタ完全制覇っていう書籍が気になってるんだけどこれはどの程度の知識がある人を対象にしてるの?

720:デフォルトの名無しさん
18/09/05 08:20:43.64 2JdbfNpR.net
どの程度っても難しいなw
簡単なポインタは分かるけど、二重ポインタとか配列が絡むと混乱しちゃう程度の知識の人向け?
初心者なら悪い本じゃないから買っちゃえ。

721:デフォルトの名無しさん
18/09/05 10:04:35.05 TsbO/g0i.net
>>701
円を書く時に使えると聞いて確かに書けるので使っていて、後で高校生向けのやたらやさしく書いてある図と絵が満載の参考書を見てどういうことか詳細がわかった。俺が中2の時の話。
で、今思うに、これぐらいならちゃんと教えれば小学生でもわかるんじゃないか?俺としては単に教えてないからできないだけのような気がしてならないぞ。
しかし後々高校に入ってから数学の授業で「これ割るこれがsin」などと教師が言ってるのを見て、こんな説明だけでわかるやつはいないだろうとも思った。
ちゃんと教えられる人があまり居ない事もわからないやつを続出させる原因なのかもなと。

722:デフォルトの名無しさん
18/09/05 10:24:41.46 mkiFi/5o.net
あの説明はひどいよな
だから何?がずーっと消えない

723:デフォルトの名無しさん
18/09/05 10:29:11.29 jTYdKpzW.net
sin,cos,tanそのものはアホな小学生でない限り余裕で理解できる。
ただ、それに付随した加法定理やらいろんな公式をセットにして教えたいし、それより先に教えることがたくさんあるので>>711の言っている通り教えてないだけだと思う。

724:デフォルトの名無しさん
18/09/05 10:29:52.26 TP9d0IJd.net
せんせい
「同じ授業を受けていい点数を取る生徒ももいるんだから、悪いのはIQの低い君達」
「分かる奴は塾に行ってる?じゃあ悪いのは君達の努力不足だ」

725:デフォルトの名無しさん
18/09/05 10:36:57.83 2JdbfNpR.net
論破やな・・・w

726:デフォルトの名無しさん
18/09/05 12:34:15.95 TWmx8fnR.net
>>709-710
初心者には、この本もよい
詳説 Cポインタ、2013、オライリー・ジャパン

727:デフォルトの名無しさん
18/09/05 12:40:26.88 BcgqOcGx.net
>>711
普通は円を書くのに三角関数を使わない
普通は

728:デフォルトの名無しさん
18/09/05 12:41:23.62 vNhhiwgZ.net
絵が円形に動くときは?

729:デフォルトの名無しさん
18/09/05 12:43:57.25 BcgqOcGx.net
絵が円形に動くとき
は普通に円を書く時ではない

730:デフォルトの名無しさん
18/09/05 12:45:48.51 vNhhiwgZ.net
え、
>>711ってarcとか使わないで円を書くって言ってるの?

731:デフォルトの名無しさん
18/09/05 12:54:42.87 usOBe9qe.net
アスペっすわ

732:デフォルトの名無しさん
18/09/05 12:59:20.81 TsbO/g0i.net
三角関数の説明に三角形だけの図を描いてこれ割るこれとか言って済まそうってのは手抜きな感じがする。やはり円も描かねば。
ま、しかし、sin. cos 使って円が書けるのがわかったのは良いが、当時のマイコンは貧弱で浮動小数点演算なんかやらせてたら遅くて仕方がなかった。
しかしBASICでグラフィックに円を描かせると妙に速い。正数計算して描いてるからだが、どうするとそんなことができるのかを延々と探り続けてようやっとわかったのが高校生になってからだったかな。
今はもうほとんど覚えてないが二乗して足してってオーバーしたら引いてみたいな計算したと思った。

733:デフォルトの名無しさん
18/09/05 13:00:45.01 TsbO/g0i.net
>>717>>720
まあ40年ぐらい昔の話だからね。

734:デフォルトの名無しさん
18/09/05 13:01:32.32 9Ih296dz.net
>>722
で?

735:デフォルトの名無しさん
18/09/05 13:07:48.81 D3bYtmsn.net
ポインタ限定でそんなに語ることがあるのか

736:デフォルトの名無しさん
18/09/05 13:15:30.75 Lw38WY1e.net
>>722
それってブレゼンハムやミッチェナーのDDAアルゴリズムを利用した直線や円周の高速描画だろ
懐かしいな

737:デフォルトの名無しさん
18/09/05 13:22:45.26 TsbO/g0i.net
>>726
何て言うのかは知らなかった。何かのプログラム解析してわかったんだったかな。その辺は忘れた。
直線も足してってオーバーしたら引くみたいなやり方だよね。今ではハードウェアで組み込まれてるんだろうな。

738:デフォルトの名無しさん
18/09/05 13:24:01.11 ElSUubWJ.net
>>725
ポインタが指す先が const の場合とかポインタそのものが const の場合とかさらに volatile が組合わさったりさらにそういうののポインタだったり配列だったり関数ポインタまで入り


739:込んだりした場合に、 正確に型宣言したり読んだりするには結構修行が必要だからいろいろややこしいことが書いてあるんじゃないか



740:デフォルトの名無しさん
18/09/05 13:27:13.74 TND9Xsam.net
>>722
>当時のマイコンは貧弱で浮動小数点演算なんかやらせてたら遅くて仕方がなかった。
この辺は工夫次第
8bitPCが全盛だった頃、動く3Dオブジェクトを表示するのに機械語で演算処理組んでいた
全部整数化し、SIN関数値は全部テーブルで持たせていたな
試して見れば分かるが実際に必要なテーブル範囲は90度もいらない

741:デフォルトの名無しさん
18/09/05 13:37:21.57 7JsiFjUt.net
敵の弾が自分めがけて飛んでくる
ってたったそれだけでも中学の頃は大変だったな・・・
なつかしい

742:デフォルトの名無しさん
18/09/05 13:47:10.12 ElSUubWJ.net
>>730
大変だった


743: どんな式を立てたかは忘れたが、角度によって弾の速さが変わっちゃったりして試行錯誤してたな



744:デフォルトの名無しさん
18/09/05 13:51:42.60 mkiFi/5o.net
1フレームごとに最短距離で追尾してくる最も厄介なミサイルが実は一番簡単

745:デフォルトの名無しさん
18/09/05 14:58:15.54 jTYdKpzW.net
もうすでにC言語なんか関係なく回顧厨になっとるな。
俺も乗っかろう。
昔はBASIC標準のライン描画やらペイントルーチンが遅いので、いかに高速なアルゴリズムを作るかパソコン雑誌の特集になってたりしたな。
超高速中間色対応ペイントルーチン!みたいな。
ある意味、良い時代だった。

746:デフォルトの名無しさん
18/09/05 16:27:30.41 GAiajT5F.net
中間色とか20年以上聞いてない

747:デフォルトの名無しさん
18/09/05 19:06:16.01 83kKikU4.net
中間管理色

748:デフォルトの名無しさん
18/09/05 20:11:02.62 oFUMlVxX.net
タイルパターン

749:デフォルトの名無しさん
18/09/05 20:19:51.65 dRudxIH1.net
ランダムディザ

750:デフォルトの名無しさん
18/09/05 20:20:14.55 TND9Xsam.net
液晶上にある発光体の色は3種類
マゼマゼする原理は同じ

751:デフォルトの名無しさん
18/09/05 21:50:01.40 PklssQfn.net
>>734
CoolType/CelarTypeがそれに近いけどな

752:デフォルトの名無しさん
18/09/05 21:50:31.53 YeNc+rPy.net
R成分100%にB成分100%をビット演算で重ねる、みたいな話か。

753:デフォルトの名無しさん
18/09/05 22:58:16.11 Lw38WY1e.net
重ねるというよりも隣接するドットを違う色で決まったパターンで表示することで
擬似的に色調表現するテクニック
基本的に8色しか使えなかった頃に多色表現するために開発された手法
複数ドットでひとつの点を表現するためにいかに自然に見せるかといかに高速化するかが
プログラム的に腕の見せ所だった

754:デフォルトの名無しさん
18/09/05 23:26:42.92 ElSUubWJ.net
cleartype はそういうのじゃなく、三原色の並びを利用して擬似的に横方向の解像度を上げる方法でしょ。
1画素内に三原色が RGB と並んでた場合、それを2画素並べると以下のように画素の分解能を超えた位置に白点を表示できる。
RGB___ 白黒 … 座標 0 に白点
_GBR__ シアン赤 … 座標 1/3 に白点
__BRG_ 青黄 … 座標 2/3 に白点
___RGB 黒白 … 座標 1 に白点

755:デフォルトの名無しさん
18/09/05 23:39:34.25 PklssQfn.net
>>742
知ってるぞ。
ClearTypeはsubpixel技術で、中間色はsubcolor技術だ。
まあ2)GrayScaleAAの方が近いといえばそうだが。
> 2) Grayscale anti-aliasing
> URLリンク(en.wikipedia.org)

756:デフォルトの名無しさん
18/09/06 00:30:08.44 RM3Caylz.net
文字表示から離れればという気もするが

757:740
18/09/06 05:55:34.60 UQb09hzL.net
すまん、投稿が受け入れられたタイミングがマズくて
>>739 に対する反応みたいに並んでしもうた。
>>740>>739 の「マゼマゼする原理は同じ」に乗っかったネタ文だ。
R成分100%とB成分100%をマゼマゼして、HTMLの16進表記で#FF00FFの色を作ったら、
「そりゃ“マゼンタ”だよ、バカだねぇお前さんは」という想定(しかし破綻)。

758:740 == 745
18/09/06 06:16:09.23 UQb09hzL.net
もちろん「マゼマゼ」は >>738 だよ、引用アンカーを間違えるとは。
マゼマゼでダメダメ。再び「バカだねぇお前さんは」

759:デフォルトの名無しさん
18/09/06 09:31:52.28 /8o/0CpY.net
>>745
ん?俺は別に煽られたとは捉えてないし問題ないぞ。
そもそも話が通じないのは「抽象思考」が出来てないからだ。
三角関数で → 円も描ける、であって、(演繹)
円を描く為には → 三角関数、ではない。(暗記)
とはいえ適用する場合は大体お約束的だし、
大学入試なんて解けるように作ってあるのだから、「暗記」タイプでも努力すれば数学の点も上げられる。
しかしそれでは駄目なんだよ。意味がない。
そして小学生に三角関数を教えても「暗記」にしかならないから、その時点で教えるのはやはり間違っている。
> これ割るこれがsin (>>711)
これも、結局の所これ以外にどう表現しろと?という話だからね。
これが嫌だったのなら教育関係に就職して改革すべきだが、
実際ゆとり教育を先導した戦犯役人はこのタイプだった(はずな)ので救えない。
理解出来なかった奴が「俺が理解出来なかったから」という理由で主導するからおかしな事になる。
今現在の「プログラミング教育導入」もこれに近く、
そもそもプログラミングできない/やったこと無い奴らが主導してるから暴走してる。
三角関数なんて、円以外で適用される場合の方が多い。
それを過度に円に結びつけるのは数学としては間違っている。
単振動なんて、本来は円運動とは関係ないだろ。あれはma=kxの解がsinxだって話であって。
内積が|a||b|cosθになるのだって、円なんて全く関係ないし。
三角関数は、「偶々そういう関数を定義したら、何か知らんけど色々使える」であって、その見方だと
> これ割るこれがsin
になってしまう。これ以外に表現しようがない。
逆に、「宇宙の全ては円で出来ている」(なぜなら三角関数が適用出来る場合が多いから)
という捉え方も出来なくはないが、こっちの方がカルトだろ。
おそらく、数学の発達過程で他にも色々関数が定義されて、でも使えない物は淘汰されて、
結果的に今の三角関数だけが残ったのだと思うぜ。

760:デフォルトの名無しさん
18/09/06 09:33:21.82 /8o/0CpY.net
中間色/CoolType./AAも、俺にとっては「隣接するピクセルを用いて中間値を表現すること」で同じだ。
お前らはそれを
・フォントの場合
・色/ピクセルの場合
と別々に覚えてるから別物に見える。それはお前らの脳内が「暗記」ベースだからだよ。
暗記ベースでプログラミングの上達を目指すのは「デザインパターン」だ。
しかしこれも必要以上に細分化し、しかもJava文法が足りない点を必死で補っていたりで、
はっきり言ってポシャったろ。あれでは無理があるのさ。
勿論、「暗記」しかできない奴はいまだにそれにすがり続けているようだが。
ただ、実際の所、プログラミングは当然実装出来ると分かっている範囲で為されることが圧倒的に多いので、
「暗記」ベースの手法でもほぼ全ケースで何かしらの適用が出来、対応出来る。
だからそんなに問題にはならず、ある意味Javaプログラマが一定レベルまで順当に成長するのはこれがある。
ただ、「暗記」ベースだと、知らない事は発想出来ない。別物扱いだから。
中間色を「抽象思考」で捉えているのなら、
方向を変えて適用した結果がCoolTypeでありAAでしかなく、これらは自然に連結する。
この点がずいぶん違う。

761:デフォルトの名無しさん
18/09/06 09:34:16.38 /8o/0CpY.net
この点に於いて、「暗記」ベースの奴は文法リッチな言語、JavaやC++の方がいい。
というかな、プログラミングが上達する奴と全く上達しない奴が居て、
別段人間的に問題がある(全く努力をしてない)訳ではないのが不思議だったのだが、
今のところの俺の結論はこれだ。
「暗記」ベースの奴はCやJavaScript等の文法がスカスカな言語では上達しにくい。(上達出来ない)
文法リッチな言語だと、「この文法はこのときに使う」というやり方で、
「プログラミングパターン」を「暗記」で積み上げることが出来る。
(これは本来「デザインパターン」と呼ばれるべき物だが、
この用語は継承をこねくり回したゴミの呼称となってしまっているので、敢えて別に命名する)
だから、文法を一通り押さえれば、知識としてのプログラミングパターンを一定量積み上げることが出来、
結果、一定までは確実に上達するというわけだ。
Javaはこの手法で平均レベルのプログラマを大量確保出来ている。
ただし逆に、文法等の暗記事項に計上されてないと、彼等は上達出来ないので、過度に暗記にすがる。
これが今の「デザインパターン」の状態だ。必要以上に細分化し、また、無駄に増やし続けている。
彼等にとっては新規パターンの登録と暗記がすなわち上達であり、それ以外に方法がないからだ。
したがって、今後ともこの暴走は続く。
C++erで言えば、彼等は shared_ptr/unique_ptr/weak_ptr の使い方にはご執心だが、そこまでしか見えていない。
次に導入されようとしている observer_ptr については必要性も使い方も分かっておらず、理解も出来ない。
なぜなら、「暗記」出来るのはそれらが定義されて以降であり、
「暗記」では現在未定義の物を演繹的に作り出すことが出来ないからだ。
良くも悪くも、C++が文法リッチになる過程で、CerとC++erが自然発生的に分かれてきたのはこの辺だと思う。
Linusから見ると、C++の文法もデザインパターンと同様のゴミの山に見えているはず。
(JavaScriptなんて、たったあれだけの文法で、C++で表現出来る範囲を越えるのだから笑える)

762:デフォルトの名無しさん
18/09/06 09:35:06.90 /8o/0CpY.net
Cの場合には文法がスカスカだから、
ポインタで → 何でも出来る、とならないと上達しにくい。(演繹)
この場合は → shared_ptr、では無理だ。暴走出来ない。(暗記)
だから「暗記」ベースな奴は文法リッチな言語を選んだ方がいい。
(ただしポインタがあまりに汎用性がありすぎて最適化等に問題があり、
結果、他言語では色々制限を付けられてきたのはご存じの通り)
逆に「たったこれだけの文法で全て表現出来るなんてステキ」と思える奴は
CやJavaScript等の文法スカスカ言語の方が向いてる。
JavaScriptがゴミゴミ言われながらもここまで残っているのもこの点が大きい。
あれは使える奴が使ったら凄く使える言語だ。
ただ、今のJavaScriptプログラマの大半がゴミなのも事実だが。
Cの授業が全く無駄だ、という話も出所はここだ。
プログラミングなんて、結局、「代入、条件分岐、関数呼び出し、ループ」でしかなく、
ループですら代入と条件分岐で実装出来るのだから冗長だ。
一応チューリング完全であるbrainfuckは関数呼び出しすらないので、これも冗長とも言える。
そしてCの授業で行われるのはまさに「代入、条件分岐、関数呼び出し、ループ」だけであり、
これでどうやって初音ミクが歌って踊るのだ?と初心者には思えるだろう。
最終的にはGPUを介してVRAM上に代入(ラスタライズ)しているだけだとしても、
それが初心者に見えるはずもない。
(もっとも、今の3Dベースの2D《テクスチャとして貼ってるだけ》だと
ラスタライズ結果をVRAMに戻しているかも怪しいが)
ただ、MITがSICPを止めたのと同様、今時初心者がCをやる必要はない。
DrawLineで線が描ける、HTML出力したら絵が出る、で済む連中がCやるのが間違ってる。
逆に、デバイスドライバ等を書いたり、
計算機自体の専門家(HighPerformanceComputing)等を目指すならCは必修になる。

763:デフォルトの名無しさん
18/09/06 09:42:07.42 MYy5/YOc.net
量子化誤差の拡散!

764:デフォルトの名無しさん
18/09/06 09:50:36.43 2H4On29+.net
コードもだらだら書いてるんだろうなぁ

765:デフォルトの名無しさん
18/09/06 10:01:03.49 BRF//rri.net
メモリーリークについて質問です
プログラム終了時に残ってしまったものに関してはOSが解放してくれるから対処しなくていいと聞きました
今までデバッグしてメモリーリークが出ると無くなるまで結構あれこれやってたんですが全部無駄だったんでしょうか

766:デフォルトの名無しさん
18/09/06 10:10:29.24 2H4On29+.net
>>753
終了時には解放してもらえるけど、メモリリークしたままだと動き続けられないじゃん。
たまに再起動してもらうの?

767:デフォルトの名無しさん
18/09/06 10:21:17.68 BRF//rri.net
あーいや想定してるのはちょっとした処理を行って出力して落ちるだけのプログラムなんです
ループの中で何回もmallocしてメモリを食いつぶすとかそんなことも無くて、ただ終了時まで動的確保した変数が解放されてないみたいな
そういう状況でお願いします

768:デフォルトの名無しさん
18/09/06 10:37:52.78 2H4On29+.net
>>755
そういう限定的な条件では解放は省略するって方針もあるかもね。
終了パターンがいろいろあると解放するだけでも一苦労だったりするし。
ただせっかく作ったそのコードは制約が多く他には転用しづらかったりと資産としての価値は低いと思う。
そもそもデバッグでメモリリークを発見とか言ってるとなると、メモリの管理はしっかりしてて解放を省略していることも設計に入ってる、という状況ではないんじゃないの?
それはメモリを管理できてないってことじゃないのかな。
そんな場当たり的なことやってると大きなコード書けないよ。
メモリリークを潰させるのは、メモリを解放すること自体が目的というよりメモリを管理させる教育的な目的じゃないかね。

769:デフォルトの名無しさん
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なんですね。
ありがとうございました。


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