次世代言語27 Nim Zig Pony Carbon Gleam (308レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
19: デフォルトの名無しさん (ワッチョイ 422c-GRcq) [sage] 2022/08/14(日) 01:50:30.53 ID:H+Dty+yM0(1/6) AAS
>>17
Nimでもスタックとヒープを使いわけられるよ。
refのついた型とクロージャの環境とstring, seqの中身はヒープに確保される。
それ以外のローカル変数はスタックに確保。
C言語のグローバル変数とstatic変数はstatic storageというスタックとは別の所に置かれるよ。

だいたいのシステムプログラミング言語ならヒープとスタックを使い分けられるんじゃないの?
20
(1): デフォルトの名無しさん (ワッチョイ 422c-GRcq) [sage] 2022/08/14(日) 01:50:48.23 ID:H+Dty+yM0(2/6) AAS
>>17
Nimでもスタックとヒープを使いわけられるよ。
refのついた型とクロージャの環境とstring, seqの中身はヒープに確保される。
それ以外のローカル変数はスタックに確保。
C言語のグローバル変数とstatic変数はstatic storageというスタックとは別の所に置かれるよ。

だいたいのシステムプログラミング言語ならヒープとスタックを使い分けられるんじゃないの?
23: デフォルトの名無しさん (ワッチョイ 422c-GRcq) [sage] 2022/08/14(日) 02:10:20.77 ID:H+Dty+yM0(3/6) AAS
>>17
Nimでもスタックとヒープを使いわけられるよ。
refのついた型とクロージャの環境とstring, seqの中身はヒープに確保される。
それ以外のローカル変数はスタックに確保。
C言語のグローバル変数とstatic変数はstatic storageというスタックとは別の所に置かれるよ。

だいたいのシステムプログラミング言語ならヒープとスタックを使い分けられるんじゃないの?
24: デフォルトの名無しさん (ワッチョイ 422c-GRcq) [sage] 2022/08/14(日) 02:20:35.55 ID:H+Dty+yM0(4/6) AAS
間違えて連続投稿してすいませんでした。
>>22
type
 SomeObj = object
  x: int

proc foo =
 var x = SomeObj(x: 10) #スタックに確保
 var y = new(SomeObj) #ヒープに確保

foo()
31: デフォルトの名無しさん (ワッチョイ 422c-GRcq) [sage] 2022/08/14(日) 19:43:04.36 ID:H+Dty+yM0(5/6) AAS
可変長配列とか文字列型などの必要なメモリ量が実行時に決まるものや
関数やブロックのスコープと変数の寿命が対応しないもの(GCで管理されるオブジェクト)などはヒープ使うしかないでしょ。
けどローカル変数などをヒープに置くと効率悪いし。
33: デフォルトの名無しさん (ワッチョイ 422c-GRcq) [sage] 2022/08/14(日) 19:58:39.91 ID:H+Dty+yM0(6/6) AAS
>>30
関数の外にある変数やstatic変数はstatic storageというプロセスが生まれてから死ぬまで存在し続ける領域に置かれるよ。
詳しくはdata segmentとかbssとかで検索してね。
static変数は値を保持し続けないといけないからスタックに置けないし、
関数の外にある変数は複数の関数から共有されるのでコンパイル時かリンク時にアドレスが決まってないといけないと思うのでおそらくスタックに置けない。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.018s