malloc はどんなときに?

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: malloc はどんなときに?

by ゲスト » 2007年5月27日(日) 13:15

7さん、イグトランスさん
非常に分かり易い解説でありがとうございました。

動的確保、大容量確保ができるということで、
早速、malloc を駆使してみます。

by イグトランス » 2007年5月27日(日) 12:10

ほかにも,mallocでは大容量のメモリを用意できます。関数内の変数では,あまり沢山のメモリを使えません。下のプログラムは,おそらくコンパイルして実行するだけで強制終了させられます。

コード: 全て選択

Const SIZE = 4 * 1024 * 1024

Sub Proc()
	Dim t[ELM(SIZE)] As Byte
End Sub

Proc()
そういうときも,mallocの出番です。

コード: 全て選択

Sub Proc()
	Dim t As *Byte
	t = malloc(SIZE)
End Sub
ただ,実際のところ,大容量のメモリ確保にはVirtualAllocが薦められているんですけどね。

Re: malloc はどんなときに?

by 7 » 2007年5月27日(日) 11:52

> Dim a[99] As Long
> と
> Dim a As *Long
> a = malloc(400)
>
> は同じようにメモリを確保しているようですが、
> 後者の方が、free関数もあることを考えると行数も増えるし、
> 気を使いますよね。
> あえて malloc が存在するには理由があると思います。
> malloc の隠された威力を教えて頂けたらと思い投稿しました。
はい。隠された威力を教えてさしあげます。

コード: 全て選択

Dim b[256] As Byte
上のようなコードはメモリの静的確保と呼ばれています。たぶん。

コード: 全て選択

Dim b As BytePtr

b=malloc(256)
上のようなコードはメモリの動的確保と呼ばれています。たぶん...。

このように静的と動的の違いがあります。で、この違いが魅力でしょうか。

静的確保では以下のようなコードが通りません。

コード: 全て選択

Dim i=10 As Long
Dim b As Byte


しかし動的確保なら大丈夫です。

コード: 全て選択

Dim i=10 As Long
Dim b As BytePtr

b=malloc(i)


こういう説明だと分かり辛いかもしれませんが、
エディットボックスのような可変長データを取得することを考えると分かり易いでしょうか。
エディットボックスのデータ量は1KBなのに変数のサイズが256Bだったら入りませんよね?
しかし動的確保ならエディットボックスのデータ量だけ変数のサイズを決めることができます。

コード: 全て選択

Dim lpStr As LPSTR

	lpStr=malloc(GetWindowTextLength(hEdit)+1)


えーと、分かって頂けたでしょうか?

malloc はどんなときに?

by ゲスト » 2007年5月27日(日) 11:36

初心者です。お願いします。

Dim a[99] As Long

Dim a As *Long
a = malloc(400)

は同じようにメモリを確保しているようですが、
後者の方が、free関数もあることを考えると行数も増えるし、
気を使いますよね。
あえて malloc が存在するには理由があると思います。
malloc の隠された威力を教えて頂けたらと思い投稿しました。
よろしくお願いします。

ページトップ