FreeBSDを語れ Part49
■ このスレッドは過去ログ倉庫に格納されています
>>87 そんなコードを書くやつなら消えたほうが良いだろw 日本語メーリングリストもこのくらい活発になればいいのにねw FreeBSDスレなのにCを毛嫌いしてる奴が多くてワロタw そんなにC使いたくないならWindowsでも使ってろ >>95 それが私のSATAなのか いつも目覚めればboot -s >>96 Pascalのstring型が内部的にそうなってたと思う。 FreeBSDな人たちはstd::stringとか使わないの? >>110 昔の言語はC以外はlengthを持つのが主流だったと思う Fortranもそうだし >>106 そんなLinusさんみたいな事云わんでも(笑) COBOLはまだまだイケるぞ 経産省が棄てたんだからw >>96 mallocしたポインタのオフセット[-1]あたりにsizeがある実装が多いから それをもっと早く規格化すればよかったと思う >>119 で型を間違えて大惨事と NULLは0だ、intは4バイトだという老害が多いんですよまだまだ mallocで管理されるsizeはバイト単位やろ wchar_t が 32bit とか言う話か? >>119 実装を規定するとか最悪やん やるなら確保した領域サイズを取得する関数を規定すべき >>101 碌にテストなんてやったことないというのがバレバレだなw 無駄なチェックを端折れて高速な処理を書けるからC使ってるのに、 遅い堅牢ならライブラリをC、C++に用意しろと言うような低レベルPGなら元からC、C++使うなってことだな。 堅牢な高級言語しか生き残ってないだろw アドレスを直接扱える危険な言語って たくさんの言語のなかどの程度あると思う? >>123 へー、すごいねー で、お前ん所のテスト密度っていくらぐらいなんだ?w >>126 Cは元々アセンブラの代替として作ったものだからポインタが扱えて当たり前ですよ。 C = 高級アセンブラだから。それが嫌な人はFortranでも使っとけということで。 >>124 ほんそれ 関数入るたびに境界チェックするコードとか入れてたらCの有難味がないな OpenBSDのportsに入ってたパッチw --- texk/dvipsk/writet1.c.orig +++ texk/dvipsk/writet1.c @@ -1449,7 +1449,9 @@ static void t1_check_unusual_charstring(void) *(strend(t1_buf_array) - 1) = ' '; t1_getline(); + alloc_array(t1_buf, strlen(t1_line_array) + strlen(t1_buf_array) + 1, T1_BUF_SIZE); strcat(t1_buf_array, t1_line_array); + alloc_array(t1_line, strlen(t1_buf_array) + 1, T1_BUF_SIZE); strcpy(t1_line_array, t1_buf_array); t1_line_ptr = eol(t1_line_array); } >>131 ごめんなさい。 全然違うサイトに誤爆です。 >>130 Cなら if ( checkfunc( func ) ) ... と1行で書けるから大したことなさそうに見えるけど、これをアセンブラで書くと、 汎用レジスタ全部退避して、戻りアドレス設定して、新しいスタックポインタ設定して、 チェック処理を実行して、戻る直前に汎用レジスタ全部戻してリターンするので、 毎回こんだけの処理させてわざわざ遅くするのが嫌になるんだよね。 全レジスタの退避と復帰を毎回実行させるのってほんとに無駄に感じる。 本当は、破壊されてもいいレジスタは関数ごとに異なるはずなので、破壊されて困るレジスタだけ退避 するようにすれば最適化されていいんだけど、そうするとどこかを書き換えたとき、元に戻さないといけない レジスタができて、それの退避を忘れただけで吹っ飛ぶ。 >>133 三行にまとめてくんないと、1ミリも理解できないんだけど 素敵なコンパイラなら4行くらいにまとめてくれないかな.... >>134 理解しなくていいよ。 x86系の知識だけで、とりあえず知ってるワードでマウント取ろうとしてるだけだから。 確かMS-C6.0の頃か?(うろ覚え)破壊しないレジスタは退避しなかった筈だが?w 十数年前からメジャーどこのコンパイラは短い関数なら勝手にインライン展開するのが殆どだし いつの時代の話をしてるんだかさっぱり 流し読みで読み飛ばしちまったけんども アセンブラでプロシージャ書いたとこでコーダーがスタックポインタを設定する事なんて先ずありえんwww >>137 俺も最初そう思って ??? 状態だったけど、よく読んだらアセンブラで書いた時の話みたい アセンブラで書く時に全レジスタ保存なんてよほど間抜けでないと普通しないけどな >>136 俺は一桁ロリに mount -f したい >>119 それはC++の場合だな Cではそんなことする処理系が無い ちなみにC++では配列の各要素に対してデストラクタを呼ばなくちゃいけない都合上サイズが格納されている >>133 レジスタ退避と復帰は専用の命令が有るけど、CPUは実際には見えてる以上にレジスタを持ってるから毎回律儀にメモリに退避とかしてないよ https://mao.5ch.net/test/read.cgi/linux/1560665525/ 286 俺はもうWindowsでVirtualBoxは諦めてるんだが、 FreeBSDとかSolarisとかどうしてもVirtualBoxでしか動かせなくて 必要なときはMacを使ってる。 FreeBSDとかSolarisがHyperVでも動かせるなら良いんだけど どうもうまく行かない。 >>145 delete [] hoge; のときですね 良く [] 付け忘れるので防止策教えてくだされ >>133 は、アセンブラでコード書いてると自然にそうなるってこと。 ルーチン内ではできるだけ汎用レジスタを使って処理したほうが早くなるから、最初にメモリから必要なデータを持ってきた後は 極力レジスタだけで処理するように書く。後からその処理の途中に別の処理を入れることになって、別の関数を挟んだとすると レジスタの値を変えてはいけないから、その関数に入ったところで全レジスタを待避し、関数の終わりで戻さないといけなくなる。 Cで同じことをしてアセンブラに展開したコードを見ると、変数の値はメモリに置いておき、必要になったらレジスタにロードして 計算したら結果をまたメモリに戻すという処理をしている。後から途中に関数が追加されても、その関数はメモリから値を 持ってきて処理するからレジスタを退避する必要はない。関数に渡すパラメータなどもスタックに入れて渡すから 同じくレジスタを退避しなくて良い。 しかしこのやり方ではメモリとレジスタ間のセーブ/ロードが頻繁に起こるので、アセンブラのソースで見るといかにも効率が悪くて 遅いとわかる。当たり前だがメモリ - レジスタ間のセーブ/ロードはレジスタ内だけの演算よりずっと遅い。 そうするくらいなら、必要なときだけレジスタを退避・復帰させた方がまし。さらに、これがforなどのループ内で使われた場合、 この遅さがプログラム全体の遅さになる。Cコンパイラのコード生成は、アセンブラから見れば遅くて無駄だらけに見える。 その分、ソースが見やすいから便利なんだけれども。 >>151 今から作るならnew/deleteなんてやめてvectorとかにしなよ deleteの[ ]付け忘れるような人は例外時の解放忘れとかもしそうだし >>152 頼むから今時のまともなコンパイラ使ってから語ってくれ… 問題はコンパイラじゃなくて変態的な処理になってしまったx86系CPUのコード処理の方だと思われ もはやアセンブラ最適化とか狂気の沙汰と聞いた あー、スモールでコード書いてた頃が懐かしい >>151 valgrindを使えば実行時にエラーを検出して実行終了時にエラーを出力してくれる つうかCやC++でコーディングする場合はvalgrindは必須だな 実行する環境によっては使えないかもしれんけど、他には静的解析ツールを使うという手もある 例えばcppcheckとか使うと実行する前に間違いを指摘してくれる FreeBSDを12.0にアップグレードしたらvalgrindがメモリ関係のエラーを検出しなくなった(泣) その上システムコールに対するサポートも不完全みたいで、エラーが出るし だれかfreebsd-portsのvalgrindを更新プリーズ… 和訳せよ Send FreeBSD to the great bitbucket in the sky. to be to be ten made to be >>158 FreeBSDを空の素晴らしいbitbucketに送ってください。 >>159 十歳になる これでも読んだほうがいいんじゃね? ttps://gihyo.jp/book/2019/978-4-297-10847-2 86系にうんざりして68系に目覚めた遠いあの日の思い出 >>163 セグメント内64kB、相対ジャンプが8bit… うんざりって言うより殺意を覚えたあの頃 些細なことは気にすんな プロテクトモード遷移でいちいち再起動の方が糞 OS/2はプロテクトモード→リアルモード遷移を再起動することなく実現したけどな 前スレ617 621で タイトルバーの向きをひねって窓の左縁に付けたがってた者ですが 紹介してくれたsawfish, awesome, flwm, wmx, xmonadそれぞれ堪能しました 感謝を込めてlightdmディスプレイマネージャのメニューに仕込んでスクショ奉納 https://imgur.com/vqmxm21.png 昔のWin3.0(3.1とかじゃないぞ)もきっちりプロテクテッドモードからリアルモードに正常に遷移してDOSに戻れてた 戻った時の事を考えて下位メモリ残しておくかとか、コードの増加とか実行時のメモリの無駄とかに目をつむって 正常終了のシーケンスを考えた設計にするかとか次第だろうて >>167 必要ないかも知れませんがlightdmの背景変えられますよ つーかプロテクテッドモードからリアルモードへの遷移は有名な話やろ? Microsoftの凄さに震えるわw https://builder.japan.zdnet.com/os-admin/sp_history-of-windows-2009/20392994/2/ 1. まずCPUの制限でプロテクテッドモードからリアルモードへは切り替えられない(Windowsの制限ではない) > Windows 2.0と80286 > その後、特定の命令を実行することで仮想記憶が利用可能なモード >(メモリ保護機能がついているため「プロテクトモード」と呼ばれる)に移行できるのだが、 >プロテクトモードからリアルモードに戻る方法は存在しなかった。 2. それをMicrosoftはとんでもない発想で実現してしまった > もし、リアルモードに戻れなければ、Windows 2.0が起動したあとはMS-DOSコマンドが実行できなくなってしまうだろう。 > > Microsoftは実に巧妙な方法でこの問題を解決した。 > > リアルモードに移行したい場合はCPUをリセットするのである。もちろん単にリセットしたのでは > Windowsは強制終了され、BIOSの初期化ルーチンが動いてしまう。 > > そこでWindowsはリセット時に実行するプログラムの実行番地をあらかじめ書き換えておく。 > そして必要なデータを退避させた上でリアルモードに移行するようにした。Windowsに戻るときはプロテクトモードに移行すればよい。 > > Windows 2.0の「DOS窓」は1つしか立ち上げることができない。それは、実際にリアルモードに移行しているためである。 最初のプロテクテッドモード(286)はリアルモードへの遷移ってCPUが非対応だったのか知らなかったw てか殆ど使われなかった286プロテクテッドモードの方の話なら286って付けろよと 相対ジャンプが8bitってw x86使ったことないだろw Windows 3.0は 8086/8088 (80286を含む)以上に対応してるからな https://en.wikipedia.org/wiki/Windows_3.0 The official system requirements for Windows 3.0: 8086/8088 processor or better 384 KB of free conventional memory (real mode), 1 MB (Standard Mode), or 2 MB (Enhanced Mode)[9] Hard disk with 6-7 MB of free space CGA, EGA, MCGA, VGA, Hercules, 8514/A or XGA graphics and an appropriate and compatible monitor MS-DOS version 3.1 or higher[1] Memory modes Windows 3.0 was the only version of Windows that could be run in three different memory modes: Real mode, intended for older computers with a CPU below Intel 80286, and corresponding to its real mode; Standard mode, intended for computers with an 80286 processor, and corresponding to its protected mode; 386 Enhanced mode, intended for newer computers with an Intel 80386 processor or above, and corresponding to its protected mode and virtual 8086 mod なんかコピペしたから、プロテクテッドモードになってるなw プロテクトモードな Win3.1とかがメジャーになる前は普通に書籍でもプロテクテッドモードって書いてあったでよ いつの間にかプロテクトモードとか呼ばれる様になっただけ どっちも間違えじゃないだろうけど、プロテクトモードって聞くとどうしても違和感がある(全プリキュア並感 386プロテクテッドモードのA5の技術書がくすんだ緑のカバー、286の方は藍色、厚さ大体1cm位な記憶 両方持ってたけど386の方は手垢が付きまくってダメになるまで読んだり調べものしたりしたな >>167 試した中でお気に入りのwmを聞いてもいい? >>173 有名な話だからこの手の話でドヤりたいたらそれぐらいは知っておかないと知ったかの烙印押されてもしょうがないわな 初めて買ったPCがi386DXな俺はここでは若僧か。 お前らジジ臭いな 俺はPentium 133MHzだ >>171 CPUリセットでリアルモードへの遷移を実現したのは、 MicrosoftではなくIBMだと思ったけど、記憶違いかな BMとMSがOS/2を共同開発していた頃なんで、どっちとも言えないのかも知れないけど >>183 >お前らジジ臭いな >俺はPentium 133MHzだ 爆速だな。 i386DXは16/20Mhzだ。もちろん20で使ってた。 1990年に買って5年間はDOSで使って、 Windowsはスルーして1995年からFreeBSDだったかな。 >>184 > MicrosoftではなくIBMだと思ったけど、記憶違いかな ハード的にリセットする仕組みが必要だからどちらかと言うとIBMだろうね そもそも>>171 の > そこでWindowsはリセット時に実行するプログラムの実行番地をあらかじめ書き換えておく。 は間違いでPC ATならリセット前にRTCのCMOS RAMにシャットダウンコードを書いておいてリセット時にそのコードがリアルモードへの復帰なら復帰用のコードを実行するようにしてるだけ >>188 お前が誰かは知らんしどうでもいいw >>173 程度の中途半端な知識で語ると恥かくという忠告だし マウント取りたがりの何でも知ってるさん凄いですね^^ 俺は>>169 >>173>>178 しか書いてないんだが? ただ事実を書いただけなんだが、どこでドヤってた? 厨二の子供から見ると自分が勝てない大人は威張っているように見えると相場は決まっている プロテクテッドて…プロテクトモードだろ 中学の英語からやり直せ 日本語訳: おじちゃんたち ぼくにもわかるおはなししてくれよ えーんえーん たしかに>>173 は自分の知識が中途半端って言う「事実」が書いてあるな まあそんな知識で>>169 とかをよく書けるもんだなって思うけどな ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる