質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

3回答

1288閲覧

ヒープ領域はツリーなのですか?

fao

総合スコア8

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/08/25 22:25

編集2020/08/25 22:30

C++ - ヒープ領域って2次元なんですか?|teratail
上記の質問の解答のコメントでZuishinさんに「ツリーだし断片化されているので一次元というものちょっと違いますね。」と言われました。
ツリーだしとはどういう意味でしょうか?
ヒープ領域はツリーなのですか?
Zuishinさんから解答が無い為、改めて質問させていただきます。
ヒープ領域がツリーなのか知りたい為、Zuishinさん以外からも広く回答を募集します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dameo

2020/08/27 23:27

記事的にもそういうことを示す記事は見つかりませんし、mallocの実装でそういう話も聞いたことはありません。↓googleでmalloc implementationで画像検索 https://www.google.com/search?q=malloc+implementation&tbm=isch どれを見てもリストのイメージです。逆に木構造のヒープツリーという用語がありますが、これと混同するなという記事はありますね。 https://it-trend.jp/development_tools/article/32-0041#chapter-1 本人が回答しない以上、間違いだったのだと思いますよ。認められないのは恥ずかしいですね。
fao

2020/09/01 20:29

ですよね〜 ちょっと検索した限りでは双方向リストなんではないかと思いました ここについてる3つの回答も推測ばかりで読む価値もないですし、mallocのソースでも読みますかね
guest

回答3

0

自分は低能なので,正直,大元の質問が何を問うているのかが正確に把握できません><

大元の質問にて,質問者様は

メモリアドレスは1次元なので、ヒープ領域も1次元かと思ったのですが

と書かれていますので,

「メモリアドレス」と「ヒープ領域」の次元が異なる可能性を考えられていて,
「メモリ上に考えているヒープ領域という概念的空間(?)は果たして何次元の存在であろうか」ということを問うているのだと思いますが,合っていますでしょうか?

ざっくりと,

アドレス空間での値(1次元)  ↑  写像  ↓ ヒープ領域内の位置(n次元)  ↑  写像  ↓ メモリ上の記憶素子の並びのうちのどれか(何次元と考えるのか謎だが)

みたいな話があるときの,nの値を知りたい,みたいな.

これは結局のところ,
「ヒープ領域とは1次元の存在である」みたいな文言が言語仕様か何か(?)に明確に存在するか否かを問うておられるということでしょうか.
(→であれば,私は存じ上げません…)


で,

ツリーだしとはどういう意味でしょうか?

というのは,おそらく,
【「ヒープ領域」という"概念"がツリー的なブツであり,故に「何次元」とは表現できない】
的な意味合いではなかろうかと思います.

大元の質問で示されている図では,
「ヒープ領域」という世界を矩形で表現していて,その中に,「使用中」とか「空き」とかいうのをぎっしりと詰め込んでいますが,これは「説明のために2次元的に表現してみただけの概念図」であって,
各「使用中」とか「空き」とかいうやつらは,「ヒープ領域」という世界の各所に点在していて,それらがツリーな管理で扱われている,と.

投稿2020/08/26 02:10

fana

総合スコア11658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2020/08/26 02:18

元の質問のリンク先は > 動的メモリブロックは「ヒープ」と呼ばれる仕組みで実現されている と書いているので,だったらもっとそれっぽい図を示してくれても良いのに感(?),みたいなのもちょっと感じますね. (まぁ,あの四角形な図でも普通は十分でしょうけど)
fana

2020/08/26 02:23 編集

あの四角い絵で言えば, ・pとかqとかrとかいう「ポインタ変数」から伸びてる矢印が「写像」 ・右側の「ヒープ領域」なる四角い世界は,(ポインタ変数が扱っているアドレスを扱う)アドレス空間とは別の世界 という概念ではなかろうか,と.
guest

0

「空き領域の管理にヒープツリーが用いられている」というのは納得できます。
求められるサイズに適した空き領域を素早く高速に探すためのコンパクトな構造として
ヒープツリーは効果的/現実的と思われますから。

もちろんメモリ領域そのものはリニアですが、管理(どれだけの大きさのメモリ断片がどこにあるか)に
ヒープツリーが使われているってことかと。

ヒープツリーはリニア(ポインタ要らず)に実装できますし。

投稿2020/08/25 23:28

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

1次元でも2次元でも3次元でもツリーでも
プログラマの好きに利用できるっていう意味じゃないですか?

釣りしてるんです?
楽しそうですね(^^;

投稿2020/08/25 22:48

PingHermit

総合スコア478

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問