C言語なら俺に聞け 156at TECH
C言語なら俺に聞け 156 - 暇つぶし2ch469:デフォルトの名無しさん
21/01/07 00:44:03.16 Vx7SD3qO0.net
うっかりプライオリティの高いスレッドをいっぱい作っちゃった場合の話

470:デフォルトの名無しさん
21/01/07 02:16:41.45 yeIMGQh50.net
何の話してたか忘れた

471:デフォルトの名無しさん
21/01/07 15:11:57.86 9QJGSme00.net
mallocを使っていても総使用量の最大は見積もっとけって話

472:デフォルトの名無しさん
21/01/07 16:20:03.10 DL1zbij8d.net
総使用量に対してメモリが十分あっても
フラグメントで確保出来ないかもしれない

473:デフォルトの名無しさん
21/01/07 17:22:12.04 6v7F/BUW0.net
malloc をラップして
オレオレアローケーターで一括で確保して使いまわそうとすると
malloc の実装とほとんど変わらんよな?って気分になる

474:デフォルトの名無しさん
21/01/07 17:32:32.97 DL1zbij8d.net
固定長が多ければ専用化の価値が大きい

475:デフォルトの名無しさん
21/01/07 17:50:56.57 9QJGSme00.net
>>469
malloc実装してみな
フラグメントなんてどんな程度の問題かわかるから

476:デフォルトの名無しさん
21/01/07 19:23:46.37 jTCzKEfy0.net
とあるスコープ内だけで有効なヒープで、さらにスコープから抜けると開放したい
という用途でがんばった

477:デフォルトの名無しさん
21/01/07 20:07:04.52 b6arBunA0.net
何十日何百日稼働するソフトならそれなりに効いてきそうだけど<フラグメント

478:
21/01/07 20:08:45.38 gAnZzjje0.net
>>473
alloca()

479:デフォルトの名無しさん
21/01/07 20:19:01.01 jTCzKEfy0.net
>>475
ほしかったがなかったのだ

480:
21/01/07 21:26:54.87 gAnZzjje0.net
>>476
C にはデストラクタがないから、C の範囲で実現するのは困難ですね
alloca() の実装は、ライブラリだけでは処理できずにコンパイラ側の支援が必要だと思いますので、標準ライブラリには入りにくいでしょうね

481:デフォルトの名無しさん
21/01/07 21:43:59.65 jTCzKEfy0.net
>>477
longjmp は対象外とし
完全自動は諦めてスコープの外に回収関数を置く紳士協定で手打ちに

482:デフォルトの名無しさん
21/01/08 00:02:52.02 RWydUoCr0.net
>>472
フラグメントで確保出来ない事があったわけだけど

483:デフォルトの名無しさん
21/01/08 00:51:10.08 aEO+ezsE0.net
使ってるアロケータの実装が何なのか, とどう使っているか示さないと何の意味もない
K&R mallocに毛が生えた程度のmalloc (Tronとか)ならものすごい勢いで断片化するし
glibc mallocとかのbest fitアロケータを使う分には断片化はかなり起こりにくい
あとメモリリークじゃないことは間違いないんだよね?

484:デフォルトの名無しさん
21/01/08 05:16:18.16 gKD5AY0L0.net
>>479
>>388を再度問う

485:デフォルトの名無しさん
21/01/08 08:53:26.45 /42fFLGad.net
C言語スレなのに組み込みやったことないヤツばっかりってのが不思議
>>480
アロケータの実装次第で断片化がおこる
と自分で書いてるわけだ
それが答え
どんな優れたアルゴリズムでも
断片化はおこるんだけど
完全に未来が予測出来る神アルゴリズムでも

486:デフォルトの名無しさん
21/01/08 09:11:57.78 yPaAOWPid.net
Go/C/C++以外に直接システムコールしてる言語ってありますか?

487:デフォルトの名無しさん
21/01/08 09:18:29.89 /42fFLGad.net
アセンブラ

488:デフォルトの名無しさん
21/01/08 09:37:02.14 MUX0m4u5M.net
c/c++もアセンブラ使わないとシステムコール呼べないけどな

489:デフォルトの名無しさん
21/01/08 12:03:05.57 lqJPJl/10.net
CALL 5 が使える言語は全部大丈夫

490:デフォルトの名無しさん
21/01/08 12:52:43.97 0DW9z0rLM.net
>>486
call 5って何のこと?

491:はちみつ餃子
21/01/08 14:24:17.01 PuoTeu6a0.net
>>477
VLA があれば alloca は要らん。
上限が見積もれないときはいずれにしても使うべきではないが……。

492:デフォルトの名無しさん
21/01/08 14:34:20.89 NkKDsd1u0.net
CALL 5ってシステムコール一般の事を指してるのかな?
CALL 5はCP/Mから引き継いだMS-DOSのファンクションコールか
ふつうMS-DOSはINT 21Hって内部割り込みつかってたけどCALL 5もできたそうな

493:デフォルトの名無しさん
21/01/08 15:15:28.39 /42fFLGad.net
直接システムコール
の定義によってはどの言語でも出来るし
定義によってはどの言語でも出来ない
質問者は定義を明確に

494:
21/01/08 19:43:55.15 cUApPko30.net
>>488
でも VLA は C++ では非推奨でしょう?
というか C であっても VLA の格納位置がスタックなら、それこそ悪意を持つクラッカに格好の餌をやっているとしか思えません‥
C99 or later では「VLA の確保場所をスタック禁止でヒープとする」という縛りはあるのでしょうか?

495:
21/01/08 21:47:27.82 cUApPko30.net
>>491,448,477
いろいろ調べたところ、私が間違っていることがわかりました、つまり alloca() はスタックに配列を確保する実装とのことだそうです
つまり alloca() は setjmp/longjmp と同じ「C で記述できない」関数ということになりますね‥‥

496:デフォルトの名無しさん
21/01/08 22:26:35.55 gKD5AY0L0.net
だからこそ標準に組み入れられているんだよ
非標準でどうしろと言うのか考えろ

497:デフォルトの名無しさん
21/01/09 13:37:23.88 lvRTpcj70.net
アセンブラで作ったサブルーチンをそうとは知らずに呼べるのはCの良いところ

498:デフォルトの名無しさん
21/01/09 14:13:13.77 wanRtpand.net
それだけならC++でも

499:デフォルトの名無しさん
21/01/09 16:16:23.92 fHVxD+CU0.net
知らずに呼べるって、それアセンブラ側でC呼び出し規約で書いてあげたからじゃね。

500:デフォルトの名無しさん
21/01/09 16:42:31.78 lvRTpcj70.net
ABIちゅーもんがあってだな

501:デフォルトの名無しさん
21/01/09 17:00:45.39 fHVxD+CU0.net
だからそう言ってる。Pascal規約で書けばPascalから呼べたり。

502:デフォルトの名無しさん
21/01/09 17:08:25.76 L3ZBilIB0.net
フルアセンブラなら
パラメーターの渡し方は自由
独自のスタック構造だろうが
レジスタだろうが
臨機応変に出来る
今時フルアセンブラなんて事は非常に稀で
C/C++の呼び出し規約に従うのが普通
というだけ

503:デフォルトの名無しさん
21/01/09 17:10:33.54 L3ZBilIB0.net
今でも超小規模マイコンだと関数コールの構造をとらないフルアセンブラコードを使う事がある

504:デフォルトの名無しさん
21/01/09 17:52:11.58 lvRTpcj70.net
__declspec(naked)とか__attribute__((naked))とか

505:デフォルトの名無しさん
21/01/09 18:48:02.08 fHVxD+CU0.net
それexternで宣言できないから、アセンブラで書いたルーチンを呼ぶためのものじゃなくて
従来アセンブラを使わないと書けなかったルーチンをCのインラインアセンブラで書くためのものじゃね?

506:デフォルトの名無しさん
21/01/09 19:47:19.13 gjIQ6YZR0.net
純粋なC言語プロジェクトとして作るより
C++プロジェクトとして作ってCコードを書いた方が
利用可能なライブラリが増えるしほぼ上位互換、という考えは合ってる?

507:デフォルトの名無しさん
21/01/09 19:51:04.00 Z+DmrKyh0.net
>>503
それ多分C++コードだと思う

508:デフォルトの名無しさん
21/01/09 20:16:57.05 kPw1IBO30.net
>>494
それができない言語の方が珍しいと思うけど?

509:デフォルトの名無しさん
21/01/09 20:17:11.62 OS8QkCVT0.net
C++のベターC的な使い方であってpureなCとうまく連結できるかというと…

510:デフォルトの名無しさん
21/01/09 20:18:36.46 kPw1IBO30.net
>>503
合ってる、いわゆるベターCって奴

511:デフォルトの名無しさん
21/01/09 21:18:21.63 lvRTpcj70.net
DLLなんかどこの馬の骨言語/コンパイラ/アセンブラで作られたかもわからんものを当たり前に使えるだろ

512:デフォルトの名無しさん
21/01/09 22:58:21.36 L3ZBilIB0.net
それはDLLで呼べるように作ってあるからであって

513:デフォルトの名無しさん
21/01/09 23:00:18.51 L3ZBilIB0.net
別にCの特徴でもない

514:デフォルトの名無しさん
21/01/09 23:45:25.11 kPw1IBO30.net
大抵の言語はDLLを呼び出す側になれるけど、呼ばれる側になれる言語はそんなにない

515:デフォルトの名無しさん
21/01/09 23:52:15.63 lvRTpcj70.net
普通にCでDLL書くぞ

516:デフォルトの名無しさん
21/01/10 16:59:27.49 97ZwT7Zl0.net
言語はOSに依存している。

517:デフォルトの名無しさん
21/01/10 17:02:58.26 N5z3vzVP0.net
OSのない非常にチープな環境でも動くのがCの特徴
例えばRAM 16バイト、ROM 256命令みたいな糞CPUでも動く
リッチな環境ならCなんか使わん

518:デフォルトの名無しさん
21/01/10 17:07:41.53 rshCbxDT0.net
>>514
> 例えばRAM 16バイト、ROM 256命令みたいな糞CPUでも動く
具体例plz.

519:デフォルトの名無しさん
21/01/10 17:12:34.41 N5z3vzVP0.net
PIC10F200

520:デフォルトの名無しさん
21/01/10 17:29:30.48 rshCbxDT0.net
>>516
ありがと、一応コンパイラもあるのね

521:デフォルトの名無しさん
21/01/11 04:19:33.81 aEPvAJq60.net
そんくらいならCよりアセンブラの方が楽そうだけど

522:デフォルトの名無しさん
21/01/11 09:26:06.49 yw8V+8is0.net
この規模でもアセンブラの方が楽って事はない
当然性能やリソースに問題がないならCの方が楽
楽をしたいなんて考える人が選ぶCPUではないけど

523:はちみつ餃子
21/01/11 09:57:05.78 MiJ5pxpq0.net
PIC は CPU なのか?
と思ってデータシートを見たら RISC CPU って書いてあったわ。

524:デフォルトの名無しさん
21/01/11 10:16:28.83 RSMcM3e30.net
>>518
まあさすがにROM 256だとCで書くのはあまり現実的じゃないわな

525:デフォルトの名無しさん
21/01/11 10:28:09.66 dLrb5ZQk0.net
>>519
コンパイラが相当なじゃじゃ馬だと
調教する(というか、こっちがされるw)のに
結構な手間暇かかったりするんだよ

526:デフォルトの名無しさん
21/01/11 12:12:48.66 yw8V+8is0.net
>>522
PIC(というか8bit全般)は
命令やアーキテクチャがじゃじゃ馬
Cのじゃじゃ馬とは比べ物にならん
開発環境構築はCもアセンブラもかわらん

527:デフォルトの名無しさん
21/01/11 12:23:14.39 dLrb5ZQk0.net
Cのじゃじゃ馬を調教するにも結局アセンブラを理解する必要があるからな
アセンブラのじゃじゃ馬だけで済むならそっちの方が楽だろ

528:デフォルトの名無しさん
21/01/11 12:30:40.51 4UZaL5drd.net
アセンブラを理解する必要なんて無いよ

529:デフォルトの名無しさん
21/01/11 12:34:47.00 dLrb5ZQk0.net
あるよ
Cに対するよくある誤解で、
アセンブラから逃げるためのものではなく
アセンブラもわかる人が手抜きするためのものだ
そもそもアセンブラで書かれていたUnicsを書き直すために作られたツールだしな

530:デフォルトの名無しさん
21/01/11 12:37:16.69 4UZaL5drd.net
>>526
いつの時代の人?

531:デフォルトの名無しさん
21/01/11 12:37:56.75 4UZaL5drd.net
楽かどうか
から話が変わってるし

532:デフォルトの名無しさん
21/01/11 12:54:40.32 RSMcM3e30.net
256程度に収まるコードならアセンブラでもそんなに苦労しないと思うよ

533:デフォルトの名無しさん
21/01/11 13:03:17.58 4UZaL5drd.net
でもアセンブラの方が楽
って事はない

534:デフォルトの名無しさん
21/01/11 13:04:29.37 yw8V+8is0.net
そもそも楽をしたいならこんな糞CPUをわざわざ選ばない

535:デフォルトの名無しさん
21/01/11 13:31:51.18 COmzXB920.net
Cコンパイラの吐き出す最適化済みのコードを人力でできればよいのだが なかなか ね

536:デフォルトの名無しさん
21/01/11 14:40:26.73 dLrb5ZQk0.net
CはISO/IEC規格で「こうでなければならない」という決まりがあるが
アセンブラにそんなものはない
初めて触るCPUは多かれ少なかれ、それまでに蓄積した偏見に逆らうところがあり
あんまり迂闊にじゃじゃ馬呼ばわりすると他の人や未来の自分にアホにされる
たとえばPICならPICが向かない用途にPICを使おうとしたり
その逆をやらかすやつは気をつけたほうがいい

537:デフォルトの名無しさん
21/01/11 14:55:18.12 yw8V+8is0.net
要するにCのが楽

538:デフォルトの名無しさん
21/01/11 18:03:00.86 T9p+a0He0.net
>>500
関数コール構造ってスタックか?

539:デフォルトの名無しさん
21/01/11 19:17:14.19 3OtB0f6U0.net
組み込みだとデバッグしやすいようにサブルーチンの引数はグローバル領域に置くとか
リターンアドレスも同じようにグローバルに置くとかあったな。

540:デフォルトの名無しさん
21/01/11 19:22:32.27 exQc5JPEM.net
呼出規約
URLリンク(ja.wikipedia.org)

541:デフォルトの名無しさん
21/01/11 21:38:48.2


542:5 ID:dLrb5ZQk0.net



543:デフォルトの名無しさん
21/01/11 22:18:26.34 3OtB0f6U0.net
COBOLみたいな高級言語の話じゃねーよw

544:デフォルトの名無しさん
21/01/12 15:17:22.63 XXwzvzv60.net
標準ヘッダファイルの関数の実際の処理コードってどこに書いてあるんですか?
ぼく「rand関数ってどんな処理すんの?」
無能教科書「stlib.hに書いてあるだよ^^」
ぼく「ほーんstlib.hはWindowsだとここのフォルダに置いてあるのか」カチカチ
ぼく「Visual Studioで開く」
ぼく「ってプロトタイプ宣言やんけ!本体の場所は?」
って感じで困惑してるんですががが?

545:デフォルトの名無しさん
21/01/12 15:20:38.53 aoRXfngS0.net
特にコレといった決まりはないので ランタイムライブラリのソースがあればラッキー程度

546:デフォルトの名無しさん
21/01/12 15:21:37.16 XXwzvzv60.net
ていせい
X stlib
O stdlib

547:デフォルトの名無しさん
21/01/12 15:24:49.50 aoRXfngS0.net
<Program Files>/Microsoft Platform SDK/src/crt
にあればラッキー

548:デフォルトの名無しさん
21/01/12 15:45:13.34 XXwzvzv60.net
>>543
たぶん自分の環境だと
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\
VC\Tools\MSVC\14.28.29333\crt\src
って奴なのだろう。
stdlib.cはなかったですね・・・

549:デフォルトの名無しさん
21/01/12 15:49:14.18 aoRXfngS0.net
>>544
関数で小分けになってたりで rand.c があったりなかったり

550:デフォルトの名無しさん
21/01/12 16:02:39.24 XXwzvzv60.net
ないですね・・・(絶望)
一端諦めたほうがよさそうかな・・・
aoRXfngS0さんは付き合ってくれてホントありがとう!感謝!

551:デフォルトの名無しさん
21/01/12 16:35:19.21 aoRXfngS0.net
どういう風に実現してるの? ならば ソースあたるしかないけど
どんな処理(機能)なの? ならば ヘルプなり man ページなり 色々あたれる

552:デフォルトの名無しさん
21/01/12 17:24:10.27 3icaK3oM0.net
ヘルプは嘘書いてたりな
いままでヘルプのいう通りある関数のフラグ書いてきたのに、ソースみたら全部無視されてたって経験が

553:デフォルトの名無しさん
21/01/12 18:07:45.16 GYcPzbFp0.net
クソMicrosoftの使うからだ。

554:デフォルトの名無しさん
21/01/12 20:21:16.28 ZB1xpZCm0.net
c/Program Files (x86)/Windows Kits/10/Source/10.0.10240.0/ucrt/stdlib/rand.cpp
c/Program Files (x86)/Windows Kits/10/Source/10.0.16299.0/ucrt/stdlib/rand.cpp
c/Program Files (x86)/Windows Kits/10/Source/10.0.17134.0/ucrt/stdlib/rand.cpp
c/Program Files (x86)/Windows Kits/10/Source/10.0.17763.0/ucrt/stdlib/rand.cpp

555:イリヤは俺の嫁
21/01/12 23:06:47.42 XXwzvzv60.net
ありがとう!
早速試してみますね

556:デフォルトの名無しさん
21/01/13 01:30:22.66 uZRkh4HP0.net
Visual Studio は、プリコンパイル済みヘッダーだろ。
pch.h (旧 stdafx.h)
もうビルド済み

557:デフォルトの名無しさん
21/01/13 06:12:29.66 CAw2lvTg0.net
afxって文言を削りたかったのねw

558:デフォルトの名無しさん
21/01/13 11:46:14.48 vx4ASjNc0.net
大体知りたいことが分かりました!
皆さんありがとうございます!

559:デフォルトの名無しさん
21/01/14 18:11:57.43 ZgCcmsal0.net
ヘルプとかマニュアルの嘘は多い
最初から疑うべき
特に日本語のやつ

560:デフォルトの名無しさん
21/01/15 07:50:56.36 FigS/mOA0.net
昔デジタルマニュアル内のサンプルソース確認してくれってわたされたやつが、
I -> 1 みたいなやつや、全角文字使われてたとか
入力ミスのサンプル集かと思った。

561:デフォルトの名無しさん
21/01/17 08:50:40.04 j2J8OKt50.net
いかにもな機械翻訳で、英訳しながら読まないと意味わかんないのとかね

562:デフォルトの名無しさん
21/01/17 10:23:01.71 j2J8OKt50.net
JIS X3010, JIS X3014どちらももうじき20年遅れ

563:デフォルトの名無しさん
21/01/19 09:32:50.28 eNVxWvb9a.net
>>514
メモリ16Gの超リッチなLinux環境で使ってすいません。

564:デフォルトの名無しさん
21/01/19 12:02:21.59 Uy0+fZqKd.net
16Gで超リッチとは何と安上りなんだ

565:デフォルトの名無しさん
21/01/20 03:33:05.19 h5t/8l7N0.net
16GBのPCを個人所有してたら超リッチ
って話じゃないぞ

566:デフォルトの名無しさん
21/01/20 08:00:15.22 6vEnElCe0.net
で、どういう話なの?

567:はちみつ餃子
21/01/20 11:53:21.26 2wFV5REW0.net
C で書かれたコードを実行するにはリッチって話っしょ

568:デフォルトの名無しさん
21/01/20 17:49:36.27 6B9ftBiM0.net
void *p=malloc(1024*1024*1024*16);

569:デフォルトの名無しさん
21/01/20 17:55:29.77 HhPa7Y4p0.net
>>564
int型が32bitの環境ならその整数の乗算部分でオーバーフローが起きて16GBにならないんでないかな

570:デフォルトの名無しさん
21/01/20 20:34:38.74 6vEnElCe0.net
>>563
意味わからん
LinuxはC言語で書いたプログラム専用じゃないし4.8PiBのメモリーを持つ富岳でもLinuxは動くし

571:デフォルトの名無しさん
21/01/20 20:48:15.35 h5t/8l7N0.net
おまえバカだろ
RAM 16バイトの底辺CPUに比べて超リッチな環境だって話

572:デフォルトの名無しさん
21/01/20 22:02:18.04 6vEnElCe0.net
バカはお前w
それは単に比べる相手がおかしいだけだろ

573:デフォルトの名無しさん
21/01/21 00:28:31.26 MGeCCcUA0.net
GUIが無いんだろ、最強じゃんw

574:デフォルトの名無しさん
21/01/21 06:10:52.98 gXoiSngNH.net
C「を」書いたのはリッチー

575:デフォルトの名無しさん
21/01/21 07:07:18.10 zKx4b76A0.net
A「おれ財布に16円しかない」
B「おれ今16万円も入ってるよ超リッチ」
>>566「16万円で超リッチとは何て安上がりなんだ」
>>566「ビル・ゲイツの財布には16億円入ってる」
A「???」
B「???」
A「誰?」
B「何で突然ビル・ゲイツ?」
A「いや、おれの財布に16円しか入ってないって話を...」
>>566「それは単に比べる相手がおかしいだけだろ」
A,B「???」

576:デフォルトの名無しさん
21/01/21 07:12:03.65 rjSQv0Wq0.net
>>571
それどう見ても「個人所有してたら超リッチ」って話だろ…
>>561は一体何を言いたかったんだ?

577:デフォルトの名無しさん
21/01/21 07:31:52.93 zKx4b76A0.net
開発ターゲットの話

578:デフォルトの名無しさん
21/01/21 08:08:33.69 rjSQv0Wq0.net
>>573
だからターゲットもチープな組込みからスパコンまであるだろ
限定なしに超リッチとか言われても井の中の蛙が語ってるとしか思えん

579:デフォルトの名無しさん
21/01/21 08:12:32.96 zKx4b76A0.net
>>574
>>571

580:デフォルトの名無しさん
21/01/21 08:38:58.68 rjSQv0Wq0.net
>>575
だからそう言うのは井の中でやれよって話

581:デフォルトの名無しさん
21/01/21 12:02:22.51 NDHJTNIed.net
流れも理解せずに話に勝手に入って来て
何を言ってるんだか

582:デフォルトの名無しさん
21/01/21 12:34:13.57 8rFkGfvd0.net
ここは胃の中です

583:デフォルトの名無しさん
21/01/21 13:14:18.23 hceb9QsBa.net
頭はプアです

584:デフォルトの名無しさん
21/01/21 13:40:44.42 xengUv2k0.net
もう引っ張ることでも無いやろ

585:デフォルトの名無しさん
21/01/21 13:54:25.02 rjSQv0Wq0.net
勝手に入ってこられるのが嫌ならブログででもやってろよw
バカすぎる

586:デフォルトの名無しさん
21/01/21 22:19:55.22 Z9MWAls10.net
>>570
エデ・イー?

587:デフォルトの名無しさん
21/01/22 12:29:52.09 pJ+Dy7HCF.net
最近のOSってmallocで実メモリ足りないときはHDD/SSDからとってきてくれるんでしょう?

588:デフォルトの名無しさん
21/01/22 12:44:10.92 MTKvFG+KM.net
仮想記憶のことなら全然違うし、全然最近でもないし、swapも埋まればmalloc失敗すると思うけど、何だろう

589:デフォルトの名無しさん
21/01/22 12:50:00.55 3IahkNr8M.net
仮想アドレス空間に隙間がなければ失敗するけどな

590:デフォルトの名無しさん
21/01/22 13:07:46.80 /3jYtxszd.net
>>584
いや
全然違うってこともない
イメージ的にはそれでいい

591:デフォルトの名無しさん
21/01/22 14:43:34.68 Pa9c7HBM0.net
スタック領域もコード領域も足りなくなったら補助記憶装置にスワップアウトするしmallocとは直接関係はしないよ

592:デフォルトの名無しさん
21/01/22 14:52:58.55 B/3A9QDar.net
コードがスワップアウトしたら実行中のプロセスはどうなるんでしょうか?

593:はちみつ餃子
21/01/22 14:59:09.88 gbaM/AZn0.net
コード領域までスワップアウトすることがあるかどうかわからんけど、
あったとしたらタイムスライスの割り当てが戻ってきたときにその退避してたコードも
メモリに戻すことになるだけでしょ。

594:デフォルトの名無しさん
21/01/22 15:03:45.51 /3jYtxszd.net
>>587
mallocと直接関係ある
なんて誰も書いてない

595:デフォルトの名無しさん
21/01/22 15:07:21.69 /3jYtxszd.net
>>588
アクセスした瞬間に例外発生
これを受けてHDD/SSDに退避してあったデータをメインメモリに戻して例外を復帰する
コードデータ関係なく

596:デフォルトの名無しさん
21/01/22 15:18:29.37 Pa9c7HBM0.net
>>590
>>583を100回音読してこい

597:デフォルトの名無しさん
21/01/22 15:22:19.21 /3jYtxszd.net
主語はOS

598:デフォルトの名無しさん
21/01/22 15:25:32.00 /3jYtxszd.net
mallocは単なるトリガー(の1例)

599:デフォルトの名無しさん
21/01/22 16:21:31.38 Pa9c7HBM0.net
主語でないと関係しないって?
日本語の勉強からやり直した方がいいと思うよ
結構マジで

600:デフォルトの名無しさん
21/01/22 16:28:50.78 /3jYtxszd.net
非制限用法

601:デフォルトの名無しさん
21/01/22 16:30:53.38 /3jYtxszd.net
直接関係してなかろうと
(例えば)mallocをトリガーとしてスワップすることは事実

602:デフォルトの名無しさん
21/01/22 19:42:10.12 Pa9c7HBM0.net
>>596
頭大丈夫?
そろそろ黙ったほうが良くね?

603:デフォルトの名無しさん
21/01/22 20:55:52.26 red8nkhVM.net
確かに直接関係はしないな
syscallというレイヤーが挟まるから
で?それがどうした?

604:デフォルトの名無しさん
21/01/22 22:55:39.06 Pa9c7HBM0.net
>>597
> (例えば)mallocをトリガーとしてスワップすることは事実
するとは限らんしそもそも仮想記憶のない環境もあるし何が事実だかw

605:デフォルトの名無しさん
21/01/22 23:26:46.95 LtnZZu+T0.net
mallocがスワップアウト要求すんのか? ページアウトですらなく?

606:デフォルトの名無しさん
21/01/23 00:33:31.85 MUxSQoqh0.net
mallocは常に成功する、問題はそのメモリにアクセスした時

607:デフォルトの名無しさん
21/01/23 00:37:30.76 QrEIYEWsM.net
Cでマルチスレッドなプログラム書くときのデザインパターンというか、オススメの書き方って何かある?

608:デフォルトの名無しさん
21/01/23 00:40:17.93 MUxSQoqh0.net
>>603
pthread

609:
21/01/23 00:47:46.15 JHWvmAOA0.net
>>603
私は c++11 以降に移行しました、言語が MT をサポしてくれているのはありがたいです‥

610:デフォルトの名無しさん
21/01/23 03:11:07.99 WU8kpFS10.net
>>600
mallocをコールした結果スワップすることがあるのは事実

611:デフォルトの名無しさん
21/01/23 03:12:25.03 WU8kpFS10.net
pthreadやc++11がデザインパターン?

612:デフォルトの名無しさん
21/01/23 07:30:28.10 4VL29Q1J0.net
>>606
>>602

613:デフォルトの名無しさん
21/01/23 08:27:23.59 WU8kpFS10.net
>>602
それは実装次第

614:デフォルトの名無しさん
21/01/23 08:43:07.74 4VL29Q1J0.net
>>609
だから>>583の様に言い切る奴はアホだ
って話でしょ

615:デフォルトの名無しさん
21/01/23 08:50:59.97 pbmfU4sr0.net
>>602
どんな実装でも仮想アドレスに連続領域が確保できなかったらmalloc呼び出し時点で失敗するんじゃないの?

616:デフォルトの名無しさん
21/01/23 09:44:47.82 MUxSQoqh0.net
>>611
実際にアクセスする時には仮想連続領域があるかもしれないじゃん

617:デフォルトの名無しさん
21/01/23 09:45:23.82 MUxSQoqh0.net
んで、そんな時こそのスワップですよw

618:デフォルトの名無しさん
21/01/23 10:27:22.67 4VL29Q1J0.net
>>611
オーバーレイで仮想空間を拡大する実装かもしれんw
オーバーヘッドがでかすぎるしそもそも今時の環境でそこまでする必要があるとは思えないけど
>>612-612
仮想アドレスと物理アドレスの区別ついてる?

619:デフォルトの名無しさん
21/01/23 10:29:19.13 MUxSQoqh0.net
>>614
バカなの?

620:デフォルトの名無しさん
21/01/23 10:31:56.75 MUxSQoqh0.net
>>611
とりあえず割り当てちゃうんだよ

621:デフォルトの名無しさん
21/01/23 10:36:34.75 MUxSQoqh0.net
アプリとかプログラムのcodeだって全部メモリ上にロードされてないからな、アクセスした時に、あっそこにはプログラム無いから今からロードするわ~、って感じだから

622:デフォルトの名無しさん
21/01/23 12:00:13.95 4VL29Q1J0.net
>>615
ネタに突っ込んでるのか、仮想アドレスも理解できてないことを指摘されて悔しいのかをはっきりさせてくれw

623:デフォルトの名無しさん
21/01/23 12:08:04.07 sAz3YI3ta.net
>>616
仮想アドレスに連続した空き領域が足りないのに、とりあえずで何を割り当てるんだよ

624:デフォルトの名無しさん
21/01/23 12:15:26.28 X7rXBKGs0.net
メモリーマップトファイルでペタバイトの巨大なプログラムを実行するんだい

625:デフォルトの名無しさん
21/01/23 12:55:57.12 pbmfU4sr0.net
>>614
俺にレス?なんか間違ってるか?

626:デフォルトの名無しさん
21/01/23 12:57:17.63 pbmfU4sr0.net
>>621
おっと612か。すまんかった

627:デフォルトの名無しさん
21/01/23 15:00:04.42 E2XTqnevd.net
>>610
言いきってるように見える?
おれには初心者が「大体こんな感じ?」って言っただけにしか見えないんだけど
意味的には大体合ってるのに
全然違う
とか
最近のOSとしか書いてないんだし
技術的な話をしたいならせめてOSを特定しようよ
勝手に特定のOSを前提にした視野が狭い人みたいだから

628:デフォルトの名無しさん
21/01/23 15:27:34.50 4VL29Q1J0.net
>>623
ああ、>>583が言い切ってるは言い過ぎだな
その後の>>586がアホだって言い直すわ

629:デフォルトの名無しさん
21/01/23 15:31:32.55 E2XTqnevd.net
いやどう見ても>>584がアホ

630:デフォルトの名無しさん
21/01/23 16:34:32.36 LPDMRZtK0.net
スワップファイルが満杯でmallocが失敗なんて状況に陥る前に対策するだろjk

631:デフォルトの名無しさん
21/01/23 16:57:50.33 5Na5U87Z0.net
linux って簡単に process 殺すよね
知らんふりも得意

632:デフォルトの名無しさん
21/01/23 18:17:32.24 4VL29Q1J0.net
>>625
アホと言うなら具体的にどこがアホって書かないと恥ずかしいだけだぞ
一応ここ技術板だし

633:619
21/01/24 15:57:31.34 5JJAlISZ0.net
>>619
64bit時代に仮想アドレスに連続した空き領域が無くなることなんか現実に無いだろ

634:デフォルトの名無しさん
21/01/24 16:53:19.15 0zbFdmBp0.net
>>629
それなら>>616の時点でそう書けばいいだろう。まあC言語の用途を考えれば後付けで64bitに限った話にしようとするのは馬鹿げているが。
で、>>616のとりあえずって結局何だったの?

635:デフォルトの名無しさん
21/01/24 17:27:58.38 5JJAlISZ0.net
>>630
常に成功を返す

636:デフォルトの名無しさん
21/01/24 17:35:27.66 1wsdfsyQ0.net
実際にアクセスしたときにページフォルト起こしてページを割り当てるとして、そのアドレスに
連続した空きがない状態じゃメモリ割り当てても使えないじゃん。

637:デフォルトの名無しさん
21/01/24 22:06:29.57 5JJAlISZ0.net
>>632
日本語が変だぞw

638:デフォルトの名無しさん
21/01/24 22:09:51.26 5JJAlISZ0.net
PFでメモリ割り当てられなきゃ、リスケジューリングだアホ

639:デフォルトの名無しさん
21/01/24 22:14:36.76 1wsdfsyQ0.net
割り当てられたとしても使えないと言っているんだが?それとも既に他で使われている領域を上書きするか?

640:デフォルトの名無しさん
21/01/24 22:18:58.47 5JJAlISZ0.net
>>635
4Kページ割り当てて使えないって何なんだよ・・

641:デフォルトの名無しさん
21/01/24 22:24:12.86 1wsdfsyQ0.net
アドレスに連続した空きがない状態だよ。最初からその話をしてるんだろ?

642:デフォルトの名無しさん
21/01/24 22:28:07.43 5JJAlISZ0.net
>>637
4K+1byte目をアクセスしたらまたPFだから、MMUの勉強したら?

643:デフォルトの名無しさん
21/01/24 22:41:44.60 1wsdfsyQ0.net
その4Kの中に要求するサイズの連続領域が取れない場合の話だよ。
いったいなにを「とりあえず」割り当てるんだか。

644:デフォルトの名無しさん
21/01/24 23:52:48.21 5uhuun5ZK.net
ページングの話とmallocの領域管理の話がごっちゃになってるな
ページアウトされた領域に空きがあるかどうかはページインしなきゃわからないかもしれないが、そしたら他のページを探しに行くだけ
最終的にどこにも空きがなけりゃmallocがエラーを返す
空き容量が十分あっても希望するサイズの連続領域がないなんてケースは実際にもあり得る

645:デフォルトの名無しさん
21/01/25 00:08:13.28 U3eoM7Fp0.net
仮想アドレスなんだから使う時まで要らないんだから、mallocは必ず成功する。
昨今のOSは全てそう実装されてる。

646:デフォルトの名無しさん
21/01/25 00:11:52.23 WuLpUwZU0.net
オーバーブッキングを平気でするホテルみたいだな

647:デフォルトの名無しさん
21/01/25 01:00:15.57 8MmNCL2s0.net
>>641
バカ?

648:デフォルトの名無しさん
21/01/25 01:17:43.98 U3eoM7Fp0.net
iOSのreusableCellの取得も必ず成功するからforce unwrapできるし

649:デフォルトの名無しさん
21/01/25 07:05:04.38 HugL0xWrM.net
>>641
仮想アドレスを使わないOSもあるんだが
まあ安易に「全て」とか使ってるからレス乞食なんだろうな

650:デフォルトの名無しさん
21/01/25 08:02:50.43 dmbNtT1m0.net
>>641
勉強しろと言った本人が理解していないのが丸わかり。
使う時まで要らないのは物理メモリであってmallocの時点で仮想アドレスは割り当てなきゃならん。
もし仮想アドレスに空きがなけりゃ「とりあえず割り当てる」なんてのも無理。

651:デフォルトの名無しさん
21/01/25 09:02:02.61 +X0AlmLXK.net
実際「mallocは常に成功する」とか根拠なく信じ込んでる奴にはシステム開発は任せられんよ
あとで痛い目みる

652:デフォルトの名無しさん
21/01/25 10:01:03.33 NuAiBZ6D0.net
>mallocは常に成功する
Win98SEで失敗したしたことあるわ。

653:デフォルトの名無しさん
21/01/25 10:44:35.68 MIcmX8A+0.net
 ハードがMMUで物理的に管理するメモリ上限とか、OSが管理する上限とか、論理上いつか確保出来ない状況は絶対来るの分かっているけれど、そこでエラー起こされると打つ手がない(思い付かない)から、そのまま落ちてもらう。
 俺が知らないだけで、良い回避方法とかあるのかな?

654:はちみつ餃子
21/01/25 11:32:21.69 ktS6mGMX0.net
>>649
・ オーバーコミット機能はオフにする
・ malloc (等) がエラーを返すかチェックを怠らない
・ 終了処理にどうしても必要なメモリは事前に確保しておいて他に使わない

655:デフォルトの名無しさん
21/01/26 07:53:24.98 ZI8ZD6Xld.net
非常用のメモリを取っとくのは
大昔から当たり前の手法だね

656:デフォルトの名無しさん
21/01/26 09:07:24.49 7OslGgb50.net
mallocを信じて生きていけばいいさと 君は叫んだだろう

657:はちみつ餃子
21/01/26 10:29:56.18 xZCVqJnF0.net
>>652
URLリンク(www.youtube.com)

658:デフォルトの名無しさん
21/01/26 11:06:15.63 CnGywsMw0.net
メモリ不足だと表示して終了しちゃいかんのか?

659:はちみつ餃子
21/01/26 11:51:32.15 xZCVqJnF0.net
>>654
それでいい状況ならそれでいいんだよ。
それじゃ駄目なときの話をしてる。

660:デフォルトの名無しさん
21/01/26 12:18:24.13 nusF9BATd.net
車を運転してたら
「メモリ不足です」と表示されてブレーキが効かなくなった
冷蔵庫が「メモリ不足です」と表示されて止まっていた
ああメモリ不足ならしょうがない
って思う人いるかな?

661:デフォルトの名無しさん
21/01/26 12:24:58.20 qqWW8hOx0.net
航空機搭載システムなんかは動的メモリ割り当て自体を禁止してるそうな
でもアルゴリズムによっては動的メモリ割り当てが本質的なこともあるだろうし
事前割り当てしたところで、自前でmymallocを実装するってだけな気はするし
ミッションクリティカルなアプリがどうやってるかはちゃんと調べないと判らんね

662:デフォルトの名無しさん
21/01/26 12:29:47.88 nusF9BATd.net
航空機なんて特別な例を出さなくても
身の回りの電気製品でソフト要因のエラーが許される物なんてなかなか無いような気がする

663:デフォルトの名無しさん
21/01/26 12:41:48.87 Ab88y5Cj0.net
>>657
オーバーフローは危険なのでスタックの使用も禁止します

664:デフォルトの名無しさん
21/01/26 12:49:59.07 nusF9BATd.net
条件を満たせは静的解析でスタック使用量はわかる
整数型はオーバーフローして危険だから禁止

665:はちみつ餃子
21/01/26 13:32:22.24 xZCVqJnF0.net
そういえば何の事例だったかでループも禁止 (停止性の証明が難しいので) とかいうのは聞いたことがあるな。

666:デフォルトの名無しさん
21/01/26 13:33:43.60 cSn18yXwM.net
>>659
再帰禁止とか組み込みなら珍しくないぞ

667:デフォルトの名無しさん
21/01/26 14:31:35.84 46etcFxHd.net
>>661
ループ禁止でコードを組める気がしないのだが
処理したらCPUリセットするの?
ループ以外に何か禁止な条件があるはず

668:デフォルトの名無しさん
21/01/26 14:35:21.22 46etcFxHd.net
ヒープ禁止は普通にある
禁止というかそもそもヒープ用にメモリが無いとか
設計方針でヒープモジュールを搭載しないとか
あとは確保オンリーなヒープってのもある
PICとかだとハード的に再帰が難しいとか

669:デフォルトの名無しさん
21/01/26 21:31:25.38 INqgRhQd0.net
JALの航空管制制御のプログラム作ったことあるけど、
1ルーチンコードサイズ4KBまでIBM3090アセンブラ
ループ処理などなく、また呼ばれる
可愛い平さん元気かなぁ・・

670:デフォルトの名無しさん
21/01/26 21:32:25.57 INqgRhQd0.net
手塚さんとかも綺麗だったな・・おれまだ学生だったw

671:
21/01/26 23:53:23.00 uzBXnria0.net
>>653
コード進行が凄い曲ですね‥‥ギターコードが書いている楽譜ってないですかね?

672:デフォルトの名無しさん
21/01/27 00:01:47.99 fhlKtwwY0.net
上の空で書いていたのか

673:デフォルトの名無しさん
21/01/27 07:49:16.31 or8n1kaA0.net
8/16bit時代のハードみたいに起動時にメモリサイズやエラーチェックしてワークエリアサイズ固定で設計するだけだわな。
そういやぁある記事で80286って工業用途を想定してて、エラーが発生して停止したら電源入れ直す以外に再起動できないとか言ってたな。

674:デフォルトの名無しさん
21/01/27 07:52:13.49 MIG3AZ730.net
>>665
ルーチンの呼び元はループ、もしくはループ相当の動きをしてるわけだよね
ループがなければ無限のサイズのコードじゃ無い限り動き続けるのは不可能じゃ?

675:デフォルトの名無しさん
21/01/27 07:59:19.27 MIG3AZ730.net
>>667
非常に簡単なのしか使ってないんで耳コピ簡単じゃ?

676:デフォルトの名無しさん
21/01/27 10:55:52.75 9MA4/mbB0.net
>656
>「メモリ不足です」と表示されてブレーキが効かなくなった
上級国民が大喜びな仕様だな。
メモリ不足になるような仕様を避けるのが当然で、
それでも起きるなら安全に停止できる機能を搭載するだろ。
とりあえず電源喪失状態でもブレーき利くようにするとか。

そういやぁどっかの列車で安全装置の故障で自動停車されなくて事故ったってのあって、
安全装置からの信号がONになった時にブレーキが作動するって仕様になってたのを
安全装置からの信号が来なくなったら(ずっと信号ONって不具合もかあるだろうから通信のやり取りでもあるのかな)
ブレーキ作動させるようになったって聞いたわ。

677:デフォルトの名無しさん
21/01/27 11:34:46.40 cJSBZXf90.net
>>667
Monacaの田中秀和って好き?

678:デフォルトの名無しさん
21/01/27 12:05:51.10 isvLWJ6Q0.net
>>656
飯塚会長なら言いそうだ

679:デフォルトの名無しさん
21/01/27 12:09:55.82 cJSBZXf90.net
>>662
組み込みが再帰禁止なのは
スタック段数が少な過ぎるからじゃないんですか
>>659 と同じことを言ってるだけと思いますが

680:デフォルトの名無しさん
21/01/27 12:12:51.81 cJSBZXf90.net
>>663
常にHALT+割り込みのみで書かれたものはあったはず

681:デフォルトの名無しさん
21/01/27 12:27:46.11 gQSND64l0.net
>>675
その理由もあるけどスタックの見積がやりにくいからという理由もある
>>661に類似だけど停止条件トチッたら容易にスタック食いつぶすし

682:デフォルトの名無しさん
21/01/27 13:33:58.28 vpj9vmrAd.net
>>662
貧乏マイコンは数段程度しかないから関数の中で関数呼ぶのすら危うかったりするな…
高級マイコンは16段の見たことあるが

683:デフォルトの名無しさん
21/01/27 13:57:29.31 DAR3YVvc0.net
HALTと割り込みでもいつかはどこかで最初からの繰り返しループにならない?
割り込み中でステート管理して、スタックを操作して最初に戻るとか?
出来ないマイコンもありそうだけど

684:デフォルトの名無しさん
21/01/27 14:01:16.93 N60gZ7990.net
そういう制御込みでコンパイルして吐き出してくれるなら Cの選択肢もあるだろうけど
それが期待できないとなると アセンブラしかない ってことになるのかな

685:デフォルトの名無しさん
21/01/27 17:35:31.51 6jCnxoTKd.net
>>678
PICでしょ
一番安いヤツはハードウェアスタック2段

686:デフォルトの名無しさん
21/01/27 17:36:57.11 6jCnxoTKd.net
>>679
手段は色々あっても
ループはループ
と思う

687:デフォルトの名無しさん
21/01/27 20:45:42.53 gQSND64l0.net
>>679
まあどこかでループは必要だわな
>>661はそういうループはきっちり検証して個々の処理ルーチンではループ禁止っていう話かと

688:デフォルトの名無しさん
21/01/27 23:07:06.58 7vi5L3Y30.net
初心者です
変数に&を付けてメモリのアドレスを表示させるプログラムを実行して(0x7efe61e298d8←こんな感じ?)
その後1時間とか経過して別のプログラムでメモリ「0x7efe61e298d8」に格納されたものを表示させることってできるんですかね?

689:デフォルトの名無しさん
21/01/27 23:11:59.94 fhlKtwwY0.net
OSが何かにもよるけど
一般論としては出来る。出来るが、
成功するかどうかは分からない

690:デフォルトの名無しさん
21/01/27 23:34:48.42 XppLd9do0.net
MS-DOSのTSRか

691:デフォルトの名無しさん
21/01/27 23:52:57.86 7vi5L3Y30.net
C言語というよりOS側の問題なんですね
ありがとうございます

692:デフォルトの名無しさん
21/01/28 05:11:34.57 52TUUvk80.net
>>681
それ、スタックを使って構造化プログラミングを実現した言語であるCを使う利点が一切ないような…
組み込み/マイコン向け言語でスタックを使わず構造化プログラミングを実現するにはcpsスタイルの言語がベストなはず、lisp方言schemeにはそれ向けのサブセット仕様もあるし、ホビー界隈ではそこそこ使われてる模様
(但し主なpc向け実装は、アーキテクチャに合ったスタックによるcps実装が多い、念のため)
forthも消えてしまったなあ
C換算百行未満でブートストラップ&セルフホスト処理系が書け、OS機能も兼ね、規格にあるライブラリ関数も改変無しコピペで動く移植性の良さ
c台頭までは組み込み/マイコン界隈を寡占してたんだが
ちゃんとスタック指向&構造化言語だけど、ハードウェアスタックに頼らないので相性がよい
唯一の敗因はlisp以上に深淵なことだな…
cは既に国際語になってしまったので、取り敢えず分かるcで書く、ってのがcが使われる唯一の理由だと思う

693:デフォルトの名無しさん
21/01/28 05:58:13.87 pfPCg+P40.net
動的確保なしの32ビットマイコン使って飯食ってるけど、さすがに再起は使わんが、
好きなだけ関数呼び出し深く出来るだけでも恵まれてたんだな。スタックオーバーフローは一応気にしないといかんけど。
ミッションクリティカルなコードなんてゼッテー無理だわw Adaとか使われるんだっけ?と思ったら微妙に廃れ気味なんね。よーしらんけど。

694:デフォルトの名無しさん
21/01/28 08:01:19.64 Z02UUfjqK.net
>>684
たぶん意味がない。
今時のOSでは、別々のプログラムからメモリ「0x7efe61e298d8」を参照しても同じ内容にならない。「仮想アドレス」でぐぐれ。
プログラム間で変数をやりとりしたければ、共有メモリを使う方法がある。

695:デフォルトの名無しさん
21/01/28 08:05:06.42 c7JCU6ma0.net
今時のOS,CPUだとアクセスした瞬間に例外発生する

696:はちみつ餃子
21/01/28 10:46:55.99 vBYpvnJx0.net
>>684
(現代的なコンピュータアーキテクチャでは) 各プロセスのアドレス空間が独立していて、
あるプロセスから見えているメモリの内容と他のプロセスから見えるそれは別物なんだよ。
他のプロセス (が持っているリソース) にアクセスしたりデバイスをコントロールするには
OS に依頼して仲介してもらうという形をとる。
プロセス間でメモリの共有をすることも可能だが、
それもあらかじめ OS に伝えて共有する実体 (物理メモリ) をそれぞれのメモリ空間にマッピングしてもらう形
なので、それを利用するプロセス同士が事前に共有に同意した状態である必要がある。
あるプロセスが自分用に割り当てられたリソース以外にはそう自由にはアクセスできないんだ。
それがセキュリティというものだよ。

697:デフォルトの名無しさん
21/01/28 11:01:24.92 dNWrUHbO0.net
>>682
毎回リセットして最初から実行するのも君の説ではループの範疇だな

698:デフォルトの名無しさん
21/01/28 11:03:43.19 dNWrUHbO0.net
>>690
>>692
DLL injection とかしても無理?

699:はちみつ餃子
21/01/28 11:57:56.44 vBYpvnJx0.net
>>694
アクセスされる側にとって (普通は) 意図しないものであるには違いないけど、
一応は OS が許可した上で各プロセスにアタッチする形なので
ひとつのプロセス内でのことになるから別のプロセスからアクセスするのとは理屈が違うんじゃないかな。
プロセスの独立性は壊れないし、権限が上位のプロセスにはアタッチできないんじゃなかったっけ?
まあときどき権限昇格の脆弱性が発見されたりはしてるけど……。

700:デフォルトの名無しさん
21/01/28 12:14:49.58 eBfsAdOM0.net
>>684
デバッガでも作りたいのか?

701:デフォルトの名無しさん
21/01/28 12:16:47.81 Tpt+oTXId.net
>>693
そうだね
ソフトによるリセットなら本質的にはソフトループと変わらない

702:
21/01/28 19:47:55.90 4gHVOrOA0.net
>>671
クラシック系の耳にはすごく斬新に聞こえますが、世間一般的には簡単な部類に入るのですか、私は井戸の底の蛙だったんですね‥‥

703:
21/01/28 19:50:41.53 4gHVOrOA0.net
>>686
TSR はロマンで私もキー


704:入れ替えとかいろいろ凝っていた時期があったんたけど、TSR に似たプログラミングって最近はなんですか?



705:
21/01/28 19:51:53.47 4gHVOrOA0.net
>>692
でも、i386 アーキテクチャの「コールゲート」とかは廃れてしまったんですよね…‥

706:デフォルトの名無しさん
21/01/28 20:19:09.21 Sg/ycOHU0.net
WaveToneとかの便利なソフトがあっての

707:
21/01/28 22:08:52.27 4gHVOrOA0.net
>>701
そのソフトは大昔(win95 の時代)にも開発してくださっていた方がいて便利に浸かっていました‥‥
----------------------------------------------------------------------------
【ソフト名】 TonagramView for Win95 Ver.0.3β
【 作成者 】 Zephyr <NCC00723@niftyserve.or.jp>
【登 録 名】 SHIINE03.LZH
【圧縮形式】 LHa 2.55b
【動作環境】 Windows 95
【転  載】 事前の許可が必要
【掲載月日】 1997/08/30
----------------------------------------------------------------------------
このプログラムは、WAVファイルを周波数解析してtonagram(ピアノロールのような
グラフ)を表示するツールです。
耳コピをしていると、どうしてもコードが採れなくて泣きたくなることがよくあり
ます。そんなときは、tonagramを調べれば、鳴ってる音を目で見ることができるの
で、適当にピックアップしてやれば楽にコードを拾えます。v(^^)
今回、GUI化によりリードアウトカーソルなどの機能が強化されています。
また、解析結果のロード・セーブが可能になりましたので、結果をセーブしておけ
ば解析にかかる時間を節約することができます。
★Ver.0.2βからの改良点
・待望(?)のGUI化
  ロード・セーブ・印刷
  リードアウトカーソル 等
・ピークサーチアルゴリズムの変更(精度より見た目を重視)
NCC00723 Zephyr

708:デフォルトの名無しさん
21/01/29 00:08:49.78 BmYQVI6m0.net
>>698
斬新に聞こえるかどうかはともかく
コード自体は非常に簡単
ちなみに私もクラシック系

709:デフォルトの名無しさん
21/01/30 12:01:56.26 EWZvTk3zF.net
>>702
404

710:デフォルトの名無しさん
21/01/31 19:33:07.61 jQyDM6Cn0.net
enum A
{
max_value = 0x7fffffffffffffffLL;
};
こんなことしても64bitのenumはつくれないんだっけ?

711:デフォルトの名無しさん
21/02/01 00:52:02.23 5yr9aQzL0.net
整数型ならいいらしいから、64bitになるコンパイラがあっても規格違反ではないと思う

712:デフォルトの名無しさん
21/02/01 01:29:58.21 OjiuyGRS0.net
infinity 定義されてるだろ?

713:デフォルトの名無しさん
21/02/01 07:03:50.51 v6ebtUL10.net
整数型に?

714:デフォルトの名無しさん
21/02/01 07:51:42.98 9cKOvUYE0.net
>>706
処理系依存しないで確実に64bit以上にする方法ってないんだっけ。
ベース型の指定はC++だよなあ。

715:デフォルトの名無しさん
21/02/01 08:04:18.96 SoQHgLGL0.net
64bit整数型がない環境があるんだから
確実に64bit以上なんて無理

716:デフォルトの名無しさん
21/02/01 08:15:50.49 v6ebtUL10.net
sizeof max_value
gcc, clang: 8
cl: 4

717:デフォルトの名無しさん
21/02/01 08:27:26.16 9cKOvUYE0.net
>>710
じゃあ「64bit整数が使える環境で」って条件だとどうだろう?

718:デフォルトの名無しさん
21/02/01 09:03:50.04 5yr9aQzL0.net
Cのenumはマクロと大して変わらんのだから、マクロで代用するとか

719:デフォルトの名無しさん
21/02/01 09:11:58.71 v6ebtUL10.net
マクロに代わるべく作られたenumがマクロで代用されるとは
無様な・・・

720:デフォルトの名無しさん
21/02/01 09:18:04.19 v6ebtUL10.net
6.7.2.2 Enumeration specifiers
3 The identifiers in an enumerator list are declared as constants that have type int and may appear wherever such are permitted.
6.7.2.2 列挙型指定子
意味規則 列挙子並びの中の識別子は,型int をもつ定数として宣言され,この型の定数が許されるところならばどこに現れてもよい。
はっきり、intと書いてあるね
long longになる余地は全くない

721:デフォルトの名無しさん
21/02/01 11:57:56.06 vkxM9MCda.net
intとlong longが同一の可能性は残る
まぁ普通ではないが
素直にC++でenum classにするのがいいのでは

722:デフォルトの名無しさん
21/02/01 14:28:14.54 fos4FOVOF.net
enum と enum class って紛らわしいよね

723:デフォルトの名無しさん
21/02/01 17:41:32.38 v6ebtUL10.net
enum classは関係ない
enum-baseだ

724:デフォルトの名無しさん
21/02/01 19:37:32.66 vkxM9MCda.net
>>718
enumのベース型ってenum classじゃなくても出来たのか
勘違いしてたわ

725:デフォルトの名無しさん
21/02/01 21:43:21.53 9cKOvUYE0.net
>>715
なるほど、ありがとう。

726:デフォルトの名無しさん
21/02/02 06:19:12.09 wjKGtX300.net
enumはステート制御で重宝する。

727:デフォルトの名無しさん
21/02/02 15:29:55.49 gtWVIswm0.net
質問です。__lsan_disableが期待通りに動きません。
サイト見るとAllocations made between calls to __lsan_disable() and __lsan_enable() will
be treated as non-leaks. Disable/enable pairs may be nested.と書いてあったのでプログラム作りました。
しかし__lsan_enable~__lsan_do_leak_checkもリークチェックされます。原因が分かりません。
#include </usr/lib/gcc/x86_64-linux-gnu/10/include/sanitizer/lsan_interface.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void* thFunc(void *arg) { __lsan_disable(); sleep(4); fprintf(stderr, "en start\n"); __lsan_enable();
fprintf(stderr, "en end\n"); sleep(4); __lsan_do_leak_check(); exit(-1);
}
int main() { int rc; pthread_t th; pthread_create(&th, 0, thFunc, 0);
for (int i = 0; i < 30000; i++) { sleep(1); int *p = malloc(1);
fprintf(stderr, "malloc\n"); } return 0;}
よろしくお願いいたします

728:デフォルトの名無しさん
21/02/03 08:08:40.40 3ZiqWZ4T0.net
>>712
処理系依存

729:デフォルトの名無しさん
21/02/04 11:24:59.43 P1e/f4pz0.net
テキストファイルを読み込む場合、主にfgetsやfgetcでやる方法があると思うのですが調べてみるとmmapを使う方法もあるようなのですがどれを使うのが良いんですかね?
やりたいのはhtmlソースの書かれたテキストファイルの簡単な解析です
もしくは全く別に有名なライブラリみたいなのがあるんでしょうか?

730:はちみつ餃子
21/02/04 12:15:35.04 ttCVH4wp0.net
>>724
大きなファイルに細かなランダムアクセスが発生するときは
シークを繰り返すよりも mmap を活用した方が有利になることもあると思うけど、
常識的に考えればひとつの html はせいぜいが数メガ程度だろうし、
凝った管理をしなくても全部メモリに乗るでしょ。

731:デフォルトの名無しさん
21/02/04 13:31:56.12 P1e/f4pz0.net
>>725
ファイルサイズで使い分ける感じなんですね
ありがとうございます

732:はちみつ餃子
21/02/04 13:43:25.23 ttCVH4wp0.net
>>726
処理の内容によってプログラムのデザインには選択肢があって、
ファイルからの読み込みの仕方はそのデザインに付随するという感じ。

733:デフォルトの名無しさん
21/02/04 14:20:09.93 jgksMTX2d.net
C言語スレで
せいぜい数メガと言っちゃう感覚

734:デフォルトの名無しさん
21/02/04 14:24:26.67 xGlwnT6u0.net
もう21世紀だからな
ここから先は1GBのテキストファイルが普通になる

735:デフォルトの名無しさん
21/02/05 07:55:44.29 I+zADhcc0.net
>>728
テキストファイルを読めてhtmlをパースするような機器で今どき数メガも載ってないケースってかなり珍しいだろ

736:デフォルトの名無しさん
21/02/05 08:01:49.33 XbPEadHi0.net
せいぜい数メガと言えるようなリッチな環境で
C言語でアプリを書く方が珍しいだろ

737:デフォルトの名無しさん
21/02/05 08:20:44.95 JqQJ/dMo0.net
>>731
質問者>>724がやりたいって言ってるんだから、珍しいかどうかなんてどうでもいいだろう

738:デフォルトの名無しさん
21/02/05 08:32:27.83 XbPEadHi0.net
せいぜい数メガと言えるようにリッチな環境かどうかなんて
>>724にしかわからないわけだけど
>>731を考えたらリッチじゃないって考えるのは自然な発想

739:デフォルトの名無しさん
21/02/05 08:42:07.98 oeXhrntJ0.net
「決めつけ」はバグとセキュリティホールの元。

740:デフォルトの名無しさん
21/02/05 09:02:30.99 AjJLCZmld.net
スパコンのOSはCで書かれている

741:デフォルトの名無しさん
21/02/05 09:20:14.53 I+zADhcc0.net
>>731,733
なぜC言語なのかは>>724に聞いてくれ
少なくとも今どきmmapまで使える環境でメガも乗ってない環境って相当珍しいだろって話な

742:デフォルトの名無しさん
21/02/05 12:39:42.10 1XmQmKI8d.net
>>736
>>734

743:デフォルトの名無しさん
21/02/05 12:52:09.08 AV0Gp17OM.net
>>737
珍しくないと言うなら実例をあげればいいだけ

744:デフォルトの名無しさん
21/02/06 10:12:48.76 DFt8vUVO0.net
mmapってUNIX系OSだけでは?他にもあるかも知れないが互換ライブラリ経由でそのOS固有の同機能のやつ呼んでたりしない?(それで良いなら良いんだが)

745:デフォルトの名無しさん
21/02/06 10:51:00.80 PohEB++tF.net
対象をhtmlに限定したのが敗因

746:デフォルトの名無しさん
21/02/06 11:26:44.70 EjDQT0l8K.net
>>739
メモリマップトファイル一般を指しての発言じゃないかな、CreateFileMapping()とか含めて。
>>740
たぶんシーケンシャルアクセスで足りるから、read()でええやんってなるよな。

747:デフォルトの名無しさん
21/02/06 11:45:50.67 zn5WrP4C0.net
>>739
何が問題なのかよくわからんが?

748:デフォルトの名無しさん
21/02/22 07:04:45.29 Xbe4DE+80.net
どうやったらループを小さくしたり無くしたり出来るのか教えてほしい。

749:デフォルトの名無しさん
21/02/22 08:02:42.93 NYs90WT8M.net
べた書き?
printf("hello flat!\n");
printf("hello flat!\n");
printf("hello flat!\n");

750:デフォルトの名無しさん
21/02/22 17:21:30.68 iIDQLaUs0.net
標準ライブラリにある処理はなるべく標準ライブラリのを使うとか
ループをまとめて関数に出すとかでいいんじゃないの?
根本的な解決にはならないかもだけど複雑度は下がる
あとはアルゴリズムの改善しかないんやない

751:デフォルトの名無しさん
21/02/23 02:48:11.51 VIkkm8/qd.net
>>739
実装は知らんがむしろwinでは頻用すると思う
80'後半くらいに生まれたそろそろ古参なスクリプト言語(Pythonなど)には大体ある
スクリプト故に富豪的に全部載せ

752:デフォルトの名無しさん
21/02/23 03:04:42.97 VIkkm8/qd.net
>>743
ループ変数をi, j, kとすれば、int ijk(範囲はi*j*k)とまとめればネストレベル3→1にできるよ
i = ijk/j/k
j = ijk%(j*k)/k
k = ijk%kね
パフォーマンスの利点�


753:烽る mo量子化学計算はナイーブには最低4段のforが要求されるんで、かなり重宝 なんで4段をcollapseしたいけど、他人が初見で解釈するのはちょっと無理強いなので控えてる



754:デフォルトの名無しさん
21/02/23 03:15:27.68 VIkkm8/qd.net
いや今書いたのも改めて並べるとmodに慣れていと1分くらい考えるか…
二段は簡潔なのでイディオムとして使って良いと思う
i*jを走るループ変数ijに対し、i==ij/j, j==ij%j
ネストは半分になるし可読性もよいので、多分ベストプラクティス
ネストしたループを全てワンライナーで書けるFortranが羨ましい

755:デフォルトの名無しさん
21/02/23 03:42:44.91 1ia+Vnu00.net
divもmodもクソ遅いと思うんですがそれは

756:デフォルトの名無しさん
21/02/23 04:31:33.75 VIkkm8/qd.net
>>749
ステップ数で考えてたからそういう視点は無かったかも、精々2倍程度だし見落としてた
-o3とかするとベンチ的には速いから最適化とか効いてるんだろうかね?

757:デフォルトの名無しさん
21/02/23 04:35:35.49 VIkkm8/qd.net
だからといってわざわざ速い最適化divmod拾ってくるまでの価値も無いし、つまらんハックか
猛省

758:デフォルトの名無しさん
21/02/23 08:24:27.89 NtDnGIIYK.net
まあ定数の割り算は掛け算で実装するよな

759:751
21/02/23 12:00:01.73 EYNng8zFd.net
>>752
今アセンブリ見てみたら2147...647=2^32-1を引いて頑張ってる様子が見えた!gcc -O3/win
色々パラメータ弄って様子見ようとしたら普通に割り出したので混乱したが、実行時に与えるとフォールバックするよう
コンパイル時に定数で与えたらそうするっぽい
勉強になった

760:デフォルトの名無しさん
21/02/23 12:21:23.56 1ia+Vnu00.net
目安でしかないがx86-64ではmulと比べてdivやmodはレイテンシ2倍どころではない場合が多い
URLリンク(www.agner.org)
パフォーマンスが重要な場合は除数を定数にするか2の冪にしてシフト/論理積にする

761:デフォルトの名無しさん
21/02/24 15:46:51.63 /D2VYVJH0.net
ソフトウェア割り込みプログラムは書けるのか

762:デフォルトの名無しさん
21/02/25 06:12:34.32 R7WVwVFS0.net
>>755
インラインアセンブラ必須かな

763:デフォルトの名無しさん
21/02/25 07:07:20.11 bxBNuN1v0.net
環境次第
組み込み系の処理系だと割り込みハンドラーを書けたり割り込みフラグの制御ができたりするのはよくある

764:デフォルトの名無しさん
21/02/25 09:55:57.73 R7WVwVFS0.net
>>757
それはC言語仕様には無い特殊な命令。SHのCコンパイラとか。

765:デフォルトの名無しさん
21/02/25 19:11:28.17 k63j55rm0.net
VCで作った実行ファイルを
cgiファイルに変える方法て
わからない?
どうしてもc.cgi.exeになって
しまう

766:デフォルトの名無しさん
21/02/25 19:17:09.21 JLHf2OjdM.net
>>759
どのHTTPサーバか、どんな設定にしてるかにもよるけど
名前だけ変えればおkじゃねーの?

767:デフォルトの名無しさん
21/02/25 20:00:24.23 MOr3wCfr0.net
ファイル名変えておいとくだけなんとちゃうの?

768:デフォルトの名無しさん
21/02/25 20:06:31.57 ZW7ncKwI0.net
Windows系サーバーだったら、
実行ファイルc.exeをc.cgiにリネームすれば動くはず

769:デフォルトの名無しさん
21/02/25 20:47:45.34 yh+1kBamK.net
そもそもCの話じゃないんだが
>>759
エクスプローラの表示の設定を「拡張子を表示する」モードにすべし
「拡張子を表示しない」のチェックを外す方式だったかもしれん

770:デフォルトの名無しさん
21/02/26 03:45:13.89 5d4w5oMJ0.net
>>763
スレチ

771:デフォルトの名無しさん
21/02/26 06:57:40.05 eCf8RuSVK.net
//何だよ俺のせいかいw
//じゃせいぜいCだけででがんばりや
#include <stdio.h>
int main() { return rename("c.cgi.exe", "c.cgi"); }

772:デフォルトの名無しさん
21/02/26 08:02:43.73 M2eccXrmd.net
renameってstdio.hだっけ?

773:デフォルトの名無しさん
21/02/26 09:51:30.74 31AFaQsJ0.net
>>766
stdioじゃよ

774:デフォルトの名無しさん
21/02/26 12:12:32.73 M2eccXrmd.net
げ、本当だ

775:デフォルトの名無しさん
21/03/15 16:52:25.12 XyNDIUjTa.net
すみません、質問させてください
exturn FUNC(void, define1) 関数名(void)
ってなってるのが、関数のプロトタイプ宣言であることは理解できているのですが
FUNC()の意味が分からないです
define1にはキーワード定義だけされたdefineが入ってます

776:デフォルトの名無しさん
21/03/15 17:06:32.77 Db4OPSpGM.net
>>769
それはC言語の文法じゃなくて、あなたのプロジェクト固有のマクロなので、同僚に聞くかgrepしてください

777:デフォルトの名無しさん
21/03/15 17:07:39.42 XyNDIUjTa.net
>>770
ですよねー
もう聞くわ

778:デフォルトの名無しさん
21/03/16 08:22:50.63 7emEuadh0.net
Cの文法内に収まる FUNC() って
一般C
#define FUNC(ret,opt) ret
Microsoft系のやつ 呼び出し規約まで対応
#define FUNC(ret,opt) ret opt
ぐらいしか想像つかんな それを吸収しようとしてるのかしら?

779:デフォルトの名無しさん
21/03/19 19:09:51.97 mKZFPhjYM.net
ret opt の記述順を変えなきゃなんないコンパイラ併用でもしてなきゃ
必然性無いよな

780:デフォルトの名無しさん
21/04/25 18:24:42.50 1rqnmNJD0.net
VS2019を使用してます。
c言語でハッシュテーブルを使いたい場合、
定番のライブラリってありますか?
自作は考えてません。

781:デフォルトの名無しさん
21/04/25 18:43:09.76 f5CNtQYv0.net
C++ hashクラスを使う
C 自作する
スキな道を歩もう

782:デフォルトの名無しさん
21/04/25 19:49:36.36 bD1toMMoM.net
Cにはない
多少は作るに該当するが、GPL汚染気にしないならhlist(list.h)かいっそのことrbtree引っ張ってくるのが楽
hlistは覚えてないがfreeBSDにもlist_headはあったと思うから雑に書いて作れる

783:デフォルトの名無しさん
21/04/25 20:00:40.49 1rqnmNJD0.net
>>775-776
ありがとうございます。

784:デフォルトの名無しさん
21/04/26 17:39:11.35 BhPjOTnw0.net
境界調整について教えて下さい
typedef struct stru{
int inta;
char ch;
double db;
} Str;
という構造体を作って、
Str st = {10 , 'n' , 5.20};
printf("構造体全体の大きさは %dバイト アドレスは %p \n", sizeof(st) , &st);
printf("inta の大きさ %dバイト アドレスは %p 値は %d \n", sizeof(st.inta), &st.inta , st.inta);
printf("ch の大きさ %dバイト アドレスは %p 値は %c \n", sizeof(st.ch) , &st.ch , st.ch);
printf("db の大きさ %dバイト アドレスは %p 値は %lf \n", sizeof(st.db) , &st.db , st.db);
としたところ、
構造体全体の大きさは 16バイト アドレスは 0019FF2C
inta の大きさ 4バイト アドレスは 0019FF2C 値は 10
ch の大きさ 1バイト アドレスは 0019FF30 値は n
db の大きさ 8バイト アドレスは 0019FF34 値は 5.200000
という結果が得られたんですけど、この中で
0019FF30から1バイト分には'n'という値が入っていて、
0019FF34から8バイト分には5.200000という値が入っているわけですよね?
では0019FF31から0019FF34までは何があるの?

785:デフォルトの名無しさん
21/04/26 17:55:49.95 NyQKOVd9d.net
何もない

786:デフォルトの名無しさん
21/04/26 18:15:58.84 IaPVNFDHa.net
ごみ

787:デフォルトの名無しさん
21/04/26 18:21:46.90 uqOlgHvIM.net
>>778
何があるかわからないしむりやり読んだら何が起こるかわからない
ってことになってる

788:デフォルトの名無しさん
21/04/26 18:27:06.04 4kXIzh+CM.net
>>778
ファイルに書き出してバイナリダンプ
gdbでx
見ても大したことない

789:778
21/04/26 18:28:20.87 BhPjOTnw0.net
その領域はとにかく使えないって事なんすかね。

790:デフォルトの名無しさん
21/04/26 18:31:26.64 NyQKOVd9d.net
そうなんです

791:デフォルトの名無しさん
21/04/26 18:32:08.60 TR73VE240.net
使いたいならchの後にcharを3つ作ればいいじゃない

792:デフォルトの名無しさん
21/04/26 20:06:39.04 fVzcGJCCa.net
>>778
__attribute__ ((packed))

793:デフォルトの名無しさん
21/04/26 20:43:03.58 +l9LtKe60.net
#pragma pack(push,1)
>>778
#pragma pack(pop)

794:デフォルトの名無しさん
21/04/26 22:14:43.60 BhPjOTnw0.net
またいつの間にかレスが。
>>784
それもありか。なるほど。
>>786,787
そういうのがあるんですか。入門書なんかには出てこないよね、それw
教えていただきありがとです

795:788
21/04/26 22:16:02.71 BhPjOTnw0.net
>>784>>785だった

796:デフォルトの名無しさん
21/04/26 22:20:18.66 fe3Q/YJ30.net
訓練でC言語を習っています。
就職先としてはJAVAの客先常駐になると思うのですが、
C言語も習う以上はある程度使えるようになりたいと思っています。
ポインタが難しいとよく見るのですが、勉強になるウェブサイトが
ありましたら教えてください。
もしくはポインタだけの参考書があるようなのですが、
それを買った方が良いですかね?

797:デフォルトの名無しさん
21/04/27 06:03:07.86 RrDgDJ6XM.net
ゆとり?
技術的な内容ならまだしも学習方法や心構えまで他人に丸投げするのは職業人の姿勢として如何なものか

798:デフォルトの名無しさん
21/04/28 18:46:29.71 7AKt1vSf0.net
そういう時代
熱くなるな
PCを持ってないような人がソフト開発者として面接に来るような時代

799:デフォルトの名無しさん
21/04/28 21:52:06.89 PZc7df0ca.net
Cで Windows、Linux、macOS のすべてで動作するコンソールアプリを作りました
標準のライブラリのみを使用していたつもりでも、知らずにGNU拡張を使用していたり、若干の移植の障害はありましたが、それほどではありませんでした
同じようなことを C++ でやろうとした場合、Cより難しくなりそうでしょうか、そうでもないでしょうか
C++ でやるからには STL は使いたいです

800:デフォルトの名無しさん
21/04/28 22:44:05.13 7AKt1vSf0.net
同じようなもんじゃない?

801:デフォルトの名無しさん
21/04/28 23:21:11.19 PlZRAN+K0.net
言語仕様としてのGNU拡張は使ってもライセンスに触れないよな?
触れるのはライブラリ使用した場合じゃないか?

802:デフォルトの名無しさん
21/04/28 23:35:23.05 4KD2riuz0.net
コンパイラ独自の拡張であってポータビリティに欠けるってだけで
それ自体がGNUライセンスに引っかかるわけではない

803:デフォルトの名無しさん
21/04/28 23:56:50.52 sVhsMckNM.net
>>790
・格納先を渡す(普通のポインタ
・callee alloc(二重ポインタ
・関数ポインタ
これだけ分かってればいいというか、仕事でならこの範囲だけにしとけ

804:デフォルトの名無しさん
21/04/29 00:15:24.35 T1kQSA270.net
意外と引っかかるのは、複雑な変数宣言を読み解くこと

805:793
21/04/29 10:41:18.72 8DhczGXra.net
ご意見ありがとうございました
やはり、掛かる手間は同じようなものですかね

806:デフォルトの名無しさん
21/04/29 11:08:27.39 1rAkIDNr0.net
基本文法を憶えたら何かまとまったアプリを作んないと
ただ言語そのものを習ってそれっきりだと忘れるだけだぞ

807:デフォルトの名無しさん
21/04/29 13:50:03.41 56IZFSRD0.net
所詮は道具だし、使わないと忘れる

808:
21/04/29 16:32:35.09 q0JKcoqRH.net
>>793
C++11 以降は、例えばスレッド制御・ファイルシステムをライブラリに取り込む、など積極的に環境依存が少なくなるように動いている(ように私には見える)ので、多分移植はもっともっと易しくなる、と思います、失礼、易しくなる気がしないでもありません‥‥

809:
21/04/29 16:39:37.88 q0JKcoqRH.net
>>790
「新・標準プログラマーズライブラリ C言語 ポインタ完全制覇」前橋 和弥著
URLリンク(www.%61%6d%61%7a%6f%6e.co.jp)
ポインタを完全制覇してくれる本だそうです、私も興味があったのでポチりました‥‥

810:793
21/04/29 16:48:12.19 loQVmfSpa.net
>>802
ありがとうございます
そんなこともあるのかなと、淡い期待もしつつ… でした

811:デフォルトの名無しさん
21/05/02 15:45:22.42 LfIZA/yy0.net
cについてほとんど知らないけど、組み込みがメインな感じですか?

812:デフォルトの名無しさん
21/05/02 15:56:09.60 /1wJlD5g0.net
システムプログラミングの方が多いんでない?元々それ用だし
OSのインターフェース提供はどこもC

813:はちみつ餃子
21/05/02 16:01:37.32 VAfyzxcR0.net
パソコンでも低レイヤ (カーネルとかデバイスドライバとか) は C で書くことも珍しくはないし、
アプリケーションのめっちゃ速度が重要なとことかは C で書いたほうがチューニングしやすい。
言語処理系なんかはだいたい C か C++ で実装されるよ。 (Python とか Ruby とか Perl とか。)
ハードウェアの都合に合わせたチューニングが必要なところはパソコンにもまだまだ有って、
割合で言えばそれほど多くは無いけど、
絶対数で言えば組み込みで C が使われるよりはパソコンで C が使われるほうが多いと思う。
(数値的な根拠があるわけじゃなくて私の印象だけど。)

814:デフォルトの名無しさん
21/05/02 16:46:12.37 3j0DSsAI0.net
これからはカーネルドライバもRustで書こうぜ

815:デフォルトの名無しさん
21/05/02 18:40:43.65 r2Ed4Ypi0.net
>>808
だからメモリ割り当てでABENDするような言語系を
カーネルで使えるわけないでしょw
2021年4月15日 パニックお断り―Linus,"Rust for Linux"の盛り上がりに釘を刺す:Linux Daily Topics|gihyo.jp … 技術評論社
URLリンク(gihyo.jp)

816:デフォルトの名無しさん
21/05/02 20:01:40.03 3j0DSsAI0.net
>>809
だいじょぶだろ
そのうちなんかキャッチする機構とか実装すんだろ
そしたらLinusもニタニタしながら受け入れるよ

817:デフォルトの名無しさん
21/05/02 22:32:14.89 r2Ed4Ypi0.net
>>810
んじゃ、そうなってから>>808みたいなことは言おうねw
狸が逃げるよw

818:デフォルトの名無しさん
21/05/03 12:38:32.98 2qlH4pSsM.net
>>811
まさにそうする話がもまいの提示した記事に書いてあるんよ

819:デフォルトの名無しさん
21/05/07 21:44:15.09 vGOhdVnf0.net
>>811
URLリンク(www.tag1consulting.com)
「Rustなー、まあそのうちわかるんじゃねーの?
 コアはねーだろうけどドライバならいんじゃね?
 C言語の置き換えっつーよりCの補佐的な?」
って言ってるし、これ読む限り Linusもだいぶ前向きじゃん

820:デフォルトの名無しさん
21/05/08 20:10:13.24 jbZm9MmR0.net
github.com/bear24rw/alsa-utils/blob/master/aplay/aplay.c :135行
static off64_t pbrec_count = LLONG_MAX, fdcount;

static off64_t pbrec_count = LLONG_MAX;
と書かれていない理由を400字以内で述べよ。
ちなみに、我が家では LLONG_MAX値 == fdcount値 です。

821:デフォルトの名無しさん
21/05/08 22:16:59.18 4nIz2VjA0.net
しらねえ。
     ↑
   5文字目

822:デフォルトの名無しさん
21/05/09 13:32:52.94 WMytKT+1F.net
>static off64_t pbrec_count = LLONG_MAX, fdcount;
>が
>static off64_t pbrec_count = LLONG_MAX;
>と書かれていない理由を400字以内で述べよ。
知らんがな
>static off64_t pbrec_count = LLONG_MAX, fdcount;
>が
>static off64_t pbrec_count = fdcount;
>と書かれていない理由を400字以内で述べよ。
書いた香具師に聴け

823:デフォルトの名無しさん
21/05/25 13:13:50.22 0e19GInL0.net
int (**c)[];

int *(*e[]);
の意味がわからずに困っています。
ちなみに二つとも意味がわかりません。これらは同じものなんでしょうか?

824:デフォルトの名無しさん
21/05/25 13:28:28.93 d4PPfL2v0.net
cはint配列へのポインタへのポインタ
eはintポインタへのポインタの配列で、丸括弧は不要
cとeは同じではない

825:デフォルトの名無しさん
21/05/25 13:33:48.93 tg9vUr3N0.net
ややこしそうなのは途中に strust や typedef 使って先送りにする

826:デフォルトの名無しさん
21/05/25 13:37:45.63 tg9vUr3N0.net
struct

827:デフォルトの名無しさん
21/05/25 13:44:44.11 7uNVaR2o0.net
ポインタ変数定義に()が付くと理解が困難になる・・・。

828:デフォルトの名無しさん
21/05/25 13:50:25.07 mW0d20UP0.net
より複雑な宣言子の解釈
URLリンク(docs.microsoft.com)

829:デフォルトの名無しさん
21/05/25 13:57:49.19 0e19GInL0.net
>>822
これが一番わかりやすかったです。
ありがとうございました。

830:デフォルトの名無しさん
21/05/25 19:01:00.19 5zVTpare0.net
小生使う機会ないんでそんな複雑な記述の経験ないし機会あっても出来る自信ないのだけれど、アセンブラで書くと縦長になるソレを横に圧縮したC言語って、ホント効率落とさず物臭する為の記述だよね。
(アセンブラよりは)安全だし。

831:デフォルトの名無しさん
21/05/25 21:20:58.20 d4PPfL2v0.net
ケントンプソンの面倒くさがりをデニスリッチーが後継した高級アセンブラ

832:デフォルトの名無しさん
21/05/25 21:26:46.44 mNrV1IEb0.net
cdecl で説明してもらえば?

833:デフォルトの名無しさん
21/05/26 09:42:42.04 mfYAtZMN0.net
pkg install cdecl すると,c++decl -> cdecl しかsym-linkしてないので
手動でexplain -> cdecl cast -> cdecl declare -> cdecl もいれておいた.
で,
explain 'int (**c)[]'
declare c as pointer to pointer to array of int
explain 'int *(*e[]);'
declare e as array of pointer to pointer to int
と説明された.

834:デフォルトの名無しさん
21/05/26 11:19:17.43 2/BE6bBSF.net
>>817-818
++c; // ← Error
++e; // ← OK
説明してみ?

835:デフォルトの名無しさん
21/05/26 11:21:32.69 2/BE6bBSF.net
ああ間違えたω
>>817-818
++c; // ← OK
++(c[0]); // ← Error
++e; // ← OK
++(e[0]); // ← OK

836:デフォルトの名無しさん
21/05/26 12:07:18.36 DNuuAFHS0.net
++eがOKなわけねえだろw

837:デフォルトの名無しさん
21/05/27 10:47:37.95 kQVwJQto0.net
ID:2/BE6bBSFは逃げたかw
まあ逃げたくもなるよな
あんな赤っ恥w

838:デフォルトの名無しさん
21/05/27 14:56:50.43 UXlES6Sbd.net
typespecifer declarator-initializer;
と実質的に型を決める文法要素が二分されてるのがイケてないとは思う
=で示されるinitializerまたは代入式の右辺でアサインされる対象が左辺そのものでなく、declaratorの識別子部分なのも=の意味論(等しくする)に合ってないよなあ
まあ慣れるんだけど

839:デフォルトの名無しさん
21/05/27 15:03:11.46 UXlES6Sbd.net
関数ポインタと配列とポインタが入り交じるようなときは、各部分毎にtypedefして、数行に分けて型を組み立てるのがよいと思う

840:デフォルトの名無しさん
21/05/27 15:08:30.66 UXlES6Sbd.net
c23では宣言(というか殆どの構文)に付けられるattribute([[attr]])が入るけど、これ改造して[[type]] identifier;の形で宣言するように(仕様上は)できるよね
c23以降の規格で取り入れられないかな?

841:デフォルトの名無しさん
21/05/28 01:02:59.83 7zb2zdx50.net
基本情報で分からないとこあるんで教えてください。。
Cに入るのがなんでキなんでしょうか
p→coursenameはポインタだから、出力する時は*p→coursenameにすべきでは無いでしょうか
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)

842:デフォルトの名無しさん
21/05/28 03:00:31.68 EK8Kl+z60.net
>>835
文字列を出力したいならフォーマット指定子は%s、第3引数以降で渡すのは先頭アドレス
*p->courseNameじゃアドレスじゃなくて先頭の1Byteになっちゃう

843:デフォルトの名無しさん
21/05/28 03:02:57.31 reEc78CW0.net
うーん、入門書はなんて書いてあるんだろ
Cで文字列を表現するときはchar型の配列もしくはchar型の配列を指し示すポインタを用いる。
だから出力するときも配列もしくはポインタを用いて、
printf("%s", str); //ここでstrはchar型配列かポインタ
みたいに記述する。
もしもここで*strと書いてしまうと、それは配列もしくはポインタが指し示す配列の先頭の1文字を示すことになり、それはもう'a'とか'b'とかいった値でしかないから、次の文字の所在がわからず文字列を取り出せない


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