探検


Rust part37

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2026/07/17(金) 19:12:31.24ID:yl11920u
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

公式ドキュメント
https://www.rust-lang.org/learn

Web上の実行環境
https://play.rust-lang.org

※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/

※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust

※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/

※次スレは原則>>980が立てること

前スレ
Rust part36
https://mevius.5ch.io/test/read.cgi/tech/1779974768/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.io/test/read.cgi/tech/1514107621/
2026/07/22(水) 00:01:05.24ID:MCYwDp1k
今日も逃げるチャンスですね、ID:2WiNYKUyさん
2026/07/22(水) 00:01:58.91ID:bNcZ+xby
結局>>671>>698が正しかったな
2026/07/22(水) 00:03:54.54ID:l09dx9EB
Rustにおける配列は基本スタック領域に置かれるし、Vecはヒープ領域に確保される
これは常識中の常識なんだが、あそこまでイキってる奴が知らんのかw
2026/07/22(水) 00:04:02.26ID:Ka9c4UTc
寝るにゃん
こうひとこと言っておけば大丈夫
2026/07/22(水) 00:05:23.64ID:cO1obK37
自分で引用した文章も読めないのは流石に笑った
802デフォルトの名無しさん
垢版 |
2026/07/22(水) 00:05:42.41ID:/BWr+zSa
>>798
ヒープ領域をコピーしていないのにディープコピーと書いてるから違和感ある
2026/07/22(水) 00:08:11.55ID:hBWpKZVl
>>802
勝手に違和感持ってろ
そんな定義は一切ないし、普通に巨大なデータを引き回さないで参照を使う理由にディープコピーを避けるというのはあるってだけ
お前の知識がないことと事実がないことは異なるだけ
2026/07/22(水) 00:08:37.24ID:YKpwIP/3
自分の知らないことはないと思ってるのはバカの特徴だよね
2026/07/22(水) 00:09:22.30ID:Jx50pW2v
ポインタで指してる先がコピーされるとディープコピーだよね
>>671はディープコピーとは違うよ
2026/07/22(水) 00:14:10.47ID:0PjCe+i4
>>805
だったらRustにはディープコピーはほとんどないじゃん
ポインタなんてほとんど使わないんだから
そんな我流定義を持ち出してきてあーだこーだ言っても事実が変わるわけじゃないよ
2026/07/22(水) 00:15:13.30ID:0PjCe+i4
データごと丸ごとコピーして実体を複製する行いはディープコピーです
これが一番一般的な定義です
プリミティブ型ならシャロ―コピーとディープコピーは一致します
2026/07/22(水) 00:16:59.55ID:VYV3iZui
>>671が言ってるのはスタック領域の巨大データの話なので、データごと丸ごとコピーして実体を複製する行いなのでディープコピーだし、プリミティブ型でもなければポインタを渡すことでも解決できないのでシャローコピーでもない、ヒープで .clone() を使うよりはOSのコールがない分速いだけのディープコピーです
2026/07/22(水) 00:18:33.47ID:yr5TLezq
>>806
ヒープ領域を持つ任意の型でclone()できるとそれがRustにおけるディープコピー
2026/07/22(水) 00:19:37.59ID:oj722HcK
そもそもディープコピーはヒープだけとかどこのアホが言い出したんだろうな
Rustでは巨大なデータをスタックに置く文化がほとんどないから普段スタックでディープコピーを問題にすることはないけど、巨大なデータをスタックに置けばディープコピーは普通に問題になる
CやC++ではヒープの確保が重いのは知られてるけど、意外とスタック上の構造体のディープコピーが安易に使われてる、と定期的に話題にもなるし
2026/07/22(水) 00:20:21.35ID:oj722HcK
>>809
そんな定義はお前の頭の中にしかないけど勝手にそう思ってればw
2026/07/22(水) 00:21:21.41ID:yr5TLezq
>>808
それはちょっとおかしいよ
例えばstruct Hage(i32, i32)型
スタック上のこの型をコピーするとディープコピーですか?
2026/07/22(水) 00:22:43.54ID:yLaC1azO
そもそもスタック領域の値を戻す時にコピーは発生し得ないと力説してた奴だからなあ
スタック上の構造体のディープコピーを安易に使う側なんだろ
2026/07/22(水) 00:23:15.66ID:4HblP/Gz
>>812
そうだが……
2026/07/22(水) 00:23:55.18ID:L1sn8Brj
なんでこのスレの単発異様に殺気立ってるの?
2026/07/22(水) 00:24:20.54ID:4HblP/Gz
Deep copy (ディープコピー) - 用語集 | MDN
https://developer.mozilla.org/ja/docs/Glossary/Deep_copy

> プロパティがすべてプリミティブ値であるオブジェクトのコピーは、ディープコピーとシャローコピーの両方の定義に当てはまります。しかし、このようなコピーの深さについて話すのはやや無意味です。というのも、このコピーには入れ子プロパティがなく、ディープコピーについては通常、入れ子プロパティを変更するコンテキストで話すからです。

はっきり書いてますね
2026/07/22(水) 00:25:03.62ID:4HblP/Gz
>>815
そこの無茶苦茶な主張してる奴がもうこのスレで300以上は確実に書きこんでる荒らしだからだぞ
818デフォルトの名無しさん
垢版 |
2026/07/22(水) 00:25:16.50ID:xdLXSwNC
[i32; 2]がディープコピーではないのはわかるけど
[i32; 20]だとディープコピーなのかな?
サイズで変わるのはやっぱなんか変だよね
サイズが大きいとディープコピーは変
2026/07/22(水) 00:25:38.81ID:L1sn8Brj
>>817
なんでそれで単発が殺気立つの?
2026/07/22(水) 00:26:17.20ID:LylUcC8d
>>818
そうだね
サイズが大きいとディープコピーだって言ってるの君だけだからね
2026/07/22(水) 00:26:54.66ID:PntR9YqK
>>819
延々話がループする荒らしの相手させられてるからだろ
スルーしても構わず書きこみ続けるからなこいつ
2026/07/22(水) 00:28:20.94ID:xdLXSwNC
i32とラッパー型X(i32)はどうなの
derive Copyしてもラッパー型はディープコピー??
2026/07/22(水) 00:28:46.52ID:PntR9YqK
>>818
Deep copy (ディープコピー) - 用語集 | MDN
https://developer.mozilla.org/ja/docs/Glossary/Deep_copy

> プロパティがすべてプリミティブ値であるオブジェクトのコピーは、ディープコピーとシャローコピーの両方の定義に当てはまります。しかし、このようなコピーの深さについて話すのはやや無意味です。というのも、このコピーには入れ子プロパティがなく、ディープコピーについては通常、入れ子プロパティを変更するコンテキストで話すからです。

ここにも書いてるけど、どれだけ小さくてもデータごと丸ごとコピーして実体を複製する行いはディープコピー
ただ、それが問題になるのは大きなデータの時だけですよって話だ
2026/07/22(水) 00:29:33.48ID:PntR9YqK
>>822
ラッパーがあってもなくてもディープコピーだね
小さいから問題にはならないけど
2026/07/22(水) 00:31:06.33ID:xdLXSwNC
スタックにあるi32をコピーするとディープコピーはちょっと違和感あるかな~
2026/07/22(水) 00:31:45.29ID:PntR9YqK
>>825
普段はそれをディープコピーとは呼ばないからね
でもディープコピーの定義には当てはまる
827sage
垢版 |
2026/07/22(水) 00:32:26.03ID:cmrJLzza
###まとめ
「ヒープ=ディープコピー、スタック=シャローコピー(または単なる代入)」という誤解は、「スタックにある変数はプリミティブか、ポインタサイズのものばかり」という暗黙の前提(あるいは特定の高水準言語の仕様)に囚われているからこそ生まれるものですね。メモリがスタックであろうとヒープであろうと、実体を伴う構造の複製を行えば、それは立派なディープコピーであり、コストの議論の対象になります。
2026/07/22(水) 00:32:43.32ID:xdLXSwNC
ひっかけなぞなぞみたい
2026/07/22(水) 00:32:52.81ID:L1sn8Brj
#[derive(Clone, Copy)]
struct X<'a, T>(&'a T);

がスタックにあったとして、スタックにあるものをコピーすればディープコピーなんだ

へえ〜
2026/07/22(水) 00:33:02.34ID:PntR9YqK
その上で大きなデータのディープコピーが問題になるのは、単純にそれを全部移し替えないといけないから遅いしメモリの無駄って話だね
RustはC/C++同様低レイヤの言語だから、一般にプログラマはそのあたりのことを考えることが多い
2026/07/22(水) 00:35:11.20ID:xdLXSwNC
>>829
たしかにディープコピーとは言い難いかも
2026/07/22(水) 00:35:22.70ID:d6JHHVBS
スタック領域においてしまうと、戻り値でムーブする時にもこのディープコピーが発生してしまう(単純なケースであればコンパイラによる最適化で解消可能)
なぜなら、関数やスコープは開始時にスタックを積み上げて終了時にスタックを戻すからで、この中から外にムーブさせるとなるとアドレスを渡して済む問題ではなくなってしまう
これはスタックで実装されている場合に限った話だけど、基本的にはスタックで実装されているからね
2026/07/22(水) 00:36:20.23ID:d6JHHVBS
>>829
「スタックにあるもの」によるなあ
データ自体がスタックに乗ってて丸ごとコピーすることを指してるならディープコピー
2026/07/22(水) 00:36:59.37ID:xdLXSwNC
>>829
イメージとしてはTをコピーするとディープコピーかな
2026/07/22(水) 00:37:32.30ID:d6JHHVBS
>>832の続き
これに対して、ヒープ領域においておけばスタックに置かれているのはその領域の管理構造体だけなので、ムーブする時は無条件にこれだけコピーすればいい
これはシャローコピーではあるけどディープコピーではない
2026/07/22(水) 00:38:56.38ID:d6JHHVBS
なので同じ大きなデータをスタックとヒープに置いた時、ムーブで戻り値として返す場合はヒープに置く方がコピーするものが少なく、動作が高速になる
2026/07/22(水) 00:42:33.61ID:blalnmjp
>>835
しっくりこない点を言ってもいい?
サイズある実体をヒープでなくスタックに置いて
管理構造体もスタックに置けば更に改善されてる気がする
2026/07/22(水) 00:43:45.85ID:blalnmjp
>>836
つまり実体をヒープに置くことが良いのではなくて
別途、管理構造体をスタックに持つことが本質ではないかい?
2026/07/22(水) 00:48:25.38ID:iwo7j10o
>>823-824, >>826-827,
>>830, >>832,
あとは>>835-836あたりに散ってしまっているからわかりにくいけど、要するに

* ディープコピーはデータ自体を含めて丸ごとコピーして実体を複製する行い
* どれだけ小さくてもスタック領域でも関係なくディープコピーになる
* ただし大きいデータの場合しか問題にはならないので、小さいデータに使うことはない
* 大きいデータの場合、借用(参照)やヒープ領域上のデータのムーブ、スタックを積み上げる時(スコープに入る時)のスタック領域上のデータのムーブは速いが、スタック領域上のデータの.clone()やスタックを戻す時のスタック領域上のデータのムーブはディープコピーになるので遅く(最適化で改善される場合アリ)、ヒープ領域上のデータの.clone()はシステムコールがあるのでそれよりはるかに遅い

こんな感じか
2026/07/22(水) 00:48:38.10ID:blalnmjp
つまり、実体をヒープ領域に置いたほうが優れている、は間違いというか錯覚
2026/07/22(水) 00:49:52.70ID:MXbcRWOz
>>837
スタックだとスコープを抜ける時に巻き戻しが入るからスタック上の実体をムーブするにもディープコピーが必要になる
単純なコードであればコンパイラが最適化でディープコピーを消すことはある
2026/07/22(水) 00:50:38.19ID:OQXWNcQK
>>840
そう思ってたいなら勝手にそう思ってたら
事実とは違うけどね
2026/07/22(水) 00:51:42.02ID:bjO+R+mh
>>838
違う
実体をヒープに置いていないのでスタックで巻き戻されない、という部分が本質
これはスタックというデータ構造を理解していればわかる
2026/07/22(水) 00:52:32.07ID:blalnmjp
>>841
下の関数に引数で渡していく時は影響なくて
上の関数に戻値で渡していく時は影響あるけど単純に最適化できそう、かな
2026/07/22(水) 00:55:39.54ID:bjO+R+mh
スタックはデータを後入れ先出しで保持するデータ構造で、スタック領域では通常これをスコープ(関数を含む)に入る時にプッシュし、スコープを抜ける時にポップする
つまりスコープに入る時にそのスタック領域で必要なメモリを確保して、スコープを抜ける時にそれをそのまま巻き戻すことで解放を行っている
なので、内側のスコープで生成したデータを外側のスコープに与える時にはコピーしなくてはならなくなる
2026/07/22(水) 00:58:01.43ID:blalnmjp
>>845
そこは静的に判っているからReturn Value Optimizationできそう
2026/07/22(水) 00:59:07.03ID:DeO+WrPt
>>844
まあ単純に戻す場合は最適化できるだろうけど、複雑なデータのやり取りがある場合は必ずしも既存のパターンだけで最適化できないことはある
最初からヒープ領域にデータを置いて管理構造体だけを移すムーブにすると、確実にシャロ―コピーとなることが保障されるので最適化頼みの賭けにならずに済む
2026/07/22(水) 01:06:02.68ID:L1sn8Brj
スタック巻き戻しってそういうことじゃないです
2026/07/22(水) 01:08:33.80ID:iL1PKXjH
また根拠のない否定か
もうみんな飽きてるよそれ
2026/07/22(水) 01:10:07.59ID:blalnmjp
>>847
そこの最適化はRustなら大丈夫だと思う
戻値が16バイトまでならレジスタ2つで返すけど
それを超えると関数呼び出し元のスタックフレームに戻値の領域を確保してそのアドレスをレジスタリストの第一引数として渡すABIになってる
呼ばれた下の関数はその渡されたアドレスに戻値を書き込むRust ABI
2026/07/22(水) 01:15:29.52ID:o2cM4ZXa
必ずそうなるってわけではないからねえ
それだと不都合なこともあり得るし、アーキテクチャによっても最終的には変わってくるだろう
2026/07/22(水) 01:19:39.84ID:blalnmjp
>>851
むしろ必ずなってくれないと動的ライブラリの仕様で困っちゃう
少なくとも同じバージョンコンパイラならABI安定してるよ
2026/07/22(水) 01:24:30.85ID:oB+DESr1
>>852
ライブラリは無駄があっても互換性優先だけど、全関数がそうかは別の問題
2026/07/22(水) 01:27:55.98ID:blalnmjp
>>853
動的リンクライブラリ以外の関数は静的にリンクだからもっと安心だと思うよ
2026/07/22(水) 01:38:42.52ID:hheEkfdk
>>854
また動くかどうかの話になってるけど、そんな話はしてないという
856デフォルトの名無しさん
垢版 |
2026/07/22(水) 04:57:35.83ID:XaGJSnmH
こんなにスレ伸ばしたって読まねぇぞ
2026/07/22(水) 05:12:55.66ID:H8x9U9EL
deep copyとshallow copyは2種類の異なるcopy方法が考えられる時にのみ
その使い分けに用いられる用語
1種類しかない時に用いたら失格
858デフォルトの名無しさん
垢版 |
2026/07/22(水) 07:28:52.11ID:bm8B9/Z+
夏休みは海とか山とか友達なんかと遊びに行きなよ
人付き合いはできて困る事はないぞ多分
2026/07/22(水) 10:18:10.68ID:qLhff68A
仮に111レスしてるおじが本人の言う通り自演してないとしても
もう一人の無限湧きの単発のおじが自演ってだけだから、結局二人でずっとまったく成立してない会話してるんだよね
OpenClawでやってるにしろ人力にしろ、本当に海か山でも行ったほうがいいと思う
860デフォルトの名無しさん
垢版 |
2026/07/22(水) 12:08:53.98ID:d19KA9Tj
音大出身の女性がITディレクターやってたらしいんだが、あり得るの?
年収は600万

https://lavender.5ch.io/test/read.cgi/karaok/1784604629/625
861デフォルトの名無しさん
垢版 |
2026/07/22(水) 12:10:09.72ID:d19KA9Tj
625 選曲してください sage 2026/07/22(水) 00:11:47.96 ID:5DADgvY5
>>608
その会社は入社1年目
そのままクライアント会社(上場)に新設されたWEB事業部に出向→移籍、社長プレゼン

我ながら特殊な経験をしてると思うよ
まだWEB専門卒の人とかも少ないし素人が現場で仕事を覚えていける時代だったから、今ではあり得ないやろね
紙媒体からWEBに移行した人も多くて、得体の知れない業界人がウヨウヨいた
2026/07/22(水) 13:14:32.22ID:5C0qO59L
普通によくある構造体struct Xxx { ... }を生成する関数
impl Xxx {
fn new( ... ) -> Self {
...
}
}
fn foo {
let x = Xxx::new( ... );
}
これはもちろんこの関数new()の中で生成したXxx型の値が呼び出し元の関数foo()にある変数xへムーブされる
Rustの抽象概念としてはここまで
ムーブが現実にはどのように実現されているかを知ることなくRustのプログラミングができる
2026/07/22(水) 13:18:55.70ID:5C0qO59L
Rustの抽象概念ムーブがどのように機械語で実装されるのか?
それがRustの高速性を決めている
普通によくあるx86-64bitのLinux環境で関数が値を返すときのムーブの実装について見てみよう
64bit二つ分までのサイズのデータを関数が返す時は64bitレジスタraxとrdxに入れて返す
しかし>>862の構造体Xxxのサイズがその128bit (=16byte)を超えていてレジスタ返しができない場合はどうなるだろう?
Rustでは関数f()でのデータ受け取り変数xのアドレスを隠れた引数として関数new()へレジスタ渡しする
new()ではそのアドレスへ直接データを書き込んでXxx構造体を作っていく

関数が多段で孫関数からXxxを返す場合でも子関数から孫関数へ隠れた引数としてアドレスが同様に渡される
孫関数は祖父関数のスタックフレームへ直接データを書き込むことになる

ムーブは抽象概念に過ぎないため実際にデータを移動(コピー)させる必要はない
最初から最終移動先へデータを書き込むことでRustは無駄なコピーを排除している
2026/07/22(水) 13:20:20.48ID:IHEroBD/
仮に額面通りmoveするんだったらコピーが入るから、効率重視のコードなら回避しないといけないでしょ
つまり最適化を理解する必要があるわけで、
> ムーブが現実にはどのように実現されているかを知ることなくRustのプログラミングができる
は誤りということになる
2026/07/22(水) 14:07:07.48ID:P03AutQj
ムーブという魔法でRustは上手いことやってくれるという抽象レベルの理解も重要
そのムーブ魔法がどう実現されているか知っておくことも重要
2026/07/22(水) 14:35:10.94ID:YIjqgtY0
魔法を信じてプログラミングしても大丈夫だよ
もし遅いと感じたら測定する
ムーブの最適化が何らかの事情でできてなければ判明してそこで初めて対処すればいいんだよ
万が一に備えて最初からヒープ領域にデータを置くことは間違った早すぎる最適化であり愚かな行為
2026/07/22(水) 15:37:11.70ID:9kaHeq4d
>>857
両方あるが
何を言ってるんだこいつは……
2026/07/22(水) 15:38:48.11ID:6Gra50HL
>>866
いや、予想できることだし最初から大きなデータをヒープに置くのはRustでも普遍的なシステムプログラミングの慣習でもあるんだわ
君が書いたことないからっててきとうなことを言ってはいけない
2026/07/22(水) 15:41:08.01ID:8n0waISf
>>863
値を返す時に必ずそうなるという主張はコンパイラを単純に考えすぎているし、そもそも出力されるアセンブリ言語や機械語はそのバージョンのコンパイラの解析能力で扱える範囲で最適化されるにすぎないことは知っておく必要がある
2026/07/22(水) 15:42:53.59ID:9kaHeq4d
>>864

>>862
> ムーブが現実にはどのように実現されているかを知ることなくRustのプログラミングができる

> ループとif文があれば全てのプログラムが書ける
みたいな理論上の話と捉えれば筋は通る
ただ、現実問題として「できる」と「やるべき」の間にはかなり深い溝がある
2026/07/22(水) 15:44:31.94ID:JycBCTuD
>>866
そもそもスタックに巨大データを置くことが誤った設計なんですけど
2026/07/22(水) 15:49:37.99ID:n22ahHSU
旧来からの発想の転換で有利なスタック領域を活用することがRustの高速化に繋がった
2026/07/22(水) 15:50:52.67ID:fqsfiDCR
流石に嘘すぎる
何のためにRustがヒープを安全に扱える仕組みを導入したのか完全に無視している
2026/07/22(水) 15:53:09.53ID:fqsfiDCR
スタック領域が有利なのは特定の条件下(確保/解放が多い、扱うデータが小さくコピーが起きても支障がない、決定論的な動作が必要でシステムコールが待てない)だけで、大きなデータを扱う場合には普通にヒープに置いた方が使い勝手はいい
2026/07/22(水) 15:57:07.11ID:O01J+ZaE
>>872
Rustが高速な理由は無駄な処理をしない、遅い処理を排除することに注力し、かつ言語仕様を厳格化することで最適化しやすいヒントを多く含むIRを生成して、LLVMに渡せるようにすることで実現されている
ヒープ領域はむしろ積極的に活用されている(たとえば、VecやStringはヒープの確保を伴う)し、スタックに大きなデータを置かないことを推奨してもいる
2026/07/22(水) 16:01:13.48ID:nRzhKxoM
Rc/Arcはヒープ領域を管轄するからこそ実現できる例のようにヒープ領域の利用は意味があるよ
基本はスタック領域を活用
必要に応じてヒープ領域
2026/07/22(水) 16:04:22.62ID:JKcxJ34H
>>876
> 基本はスタック領域を活用
この時点で嘘なんだよな
Rustはプリミティブ値以外ほとんどヒープに置く
配列よりもVecを使う言語だぞ
2026/07/22(水) 16:10:10.68ID:Of/BcPgB
>>875
スタックに大きなデータを置いても構わない
推奨なんてものはない
例えば全てのデータをスタックに置いてL2キャッシュの恩恵により高速に動かすことなど普通に行われている
2026/07/22(水) 16:25:45.26ID:XYz54jbC
>>878
ダウト
スタックに置くこととL2キャッシュに載ることに関連性はない
2026/07/22(水) 16:31:09.68ID:c7srhqru
>>877
初心者なのかもしれんがRustではスタック上で配列を使うクレートも盛んに使われているぞ
適材適所で使い分けが肝心
2026/07/22(水) 16:59:58.86ID:Z37YkZf/
言い争ってる内容のレベルが日々下がってくね
2026/07/22(水) 17:15:11.12ID:XYz54jbC
>>880
そりゃ機能があるのに全く使われてないと仮定するのは無理があるし、そんなことは言ってないでしょ
「よりも」はゼロヒャクじゃないよ
2026/07/22(水) 17:16:51.37ID:XYz54jbC
>>881
Rustろくに書いたことないのにゼロヒャクで断言したがる奴が多すぎるんだよな
2026/07/22(水) 17:22:27.60ID:XYz54jbC
>>879の補足
CPUのキャッシュはヒープ領域のデータでも使用頻度が高ければキャッシュするので、スタック領域かヒープ領域かは関係がない
そのためにキャッシュラインに合わせてアラインメントしてヒープ領域を使うということも行われる
また、スタック領域に置かれていてもアラインメントがされていなければキャッシュ効率が悪くなることも普通にある
2026/07/22(水) 22:43:51.19ID:o2Jdm9L+
メモリ空間をOSが管理してると、ヒープ領域を使うのにいちいちシステムコールが必要になるから、欠点が目立つんだよな
でもスタック領域に欠点がないかと言えば、別にそんなこともないから使い分けが必要
2026/07/22(水) 23:14:46.59ID:WzrqCFod
>>879
スタック上で処理したほうが圧倒的に有利になっている理由は、他のローカル変数はスタック上にあり、関数呼び出し時もスタックを用いるため
メモリの使用範囲がスタック上のみに限定され、メモリキャッシュ効果が最大限に発揮されます
2026/07/23(木) 02:50:21.49ID:luqj8bdN
>>886
そもそもスタック領域を大きくしたらスタック全体がキャッシュに乗らなくなるし、ヒープでも確保を工夫すればキャッシュに乗せられるので、ほとんど関係がない
888デフォルトの名無しさん
垢版 |
2026/07/23(木) 03:28:47.44ID:0/IAmlr6
>>887
大きさ問題はその両者で中立。
ヒープだけを使うことは不可能だがスタックだけを使うことは可能だから必ずスタックが有利になる。
2026/07/23(木) 07:58:46.98ID:rkdmRmzF
仮に (あくまでも仮に) スタックの多用が全面的にメリットばかりだとしてもたとえば Linux のデフォルトだとスタックの上限はたった 8MB だぞ。
上限を引き上げる設定をやったことなんてほとんどないだろ。みんなスタック 8MB でやりくりしてるんだよ。
2026/07/23(木) 08:13:33.16ID:AUDDS2Ak
> スタックの多用が全面的にメリットばかり
正にこれが間違い

ヒープ領域に確保する方が関係データを含めてアクセスローカリティを考慮したデータレイアウト設計が出来る
2026/07/23(木) 08:19:49.70ID:z4+uszs5
組み込みだとスタックが浅いからって
関数呼び出しはするな
引数も使うな
全部グローバルでやりとりしろ
みたいな流儀があったらしいと聞くが
なんでそういう絶対的な制約があるわけでもないのに似たような縛りプレイやろうとしてるんだろう
892デフォルトの名無しさん
垢版 |
2026/07/23(木) 11:19:45.15ID:FxkCx1gi
>>889
8MBはデフォルト値にすぎないから
起動プロセスのための環境変数を設定するタイミングと同じように
起動直前で例えばulimit -s 65536すれば子プロセスのみスタック領域を64MBに変えることができるよ
2026/07/23(木) 11:33:58.96ID:rkdmRmzF
>>892
デフォルトなのは知ってるからデフォルトって書いてるだろ。
変更できるのは知ってるから、でも変更したことないだろ (それが普通) って話をしてる。
2026/07/23(木) 11:43:37.14ID:ZelaGfP0
スタック領域サイズだけに限らず諸々のリソースのパラメータは各用途に応じて設定して運用が行われている
2026/07/23(木) 11:46:07.77ID:1wG4VbX9
Rustってすごい言語なんですね
2026/07/23(木) 11:47:21.36ID:SaQIv/sp
>各用途に応じて設定して運用が行われている
(つまり、各用途に応じた設定をして運用を行ったことはない)
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況