初心者です。お願いします。
Dim a[99] As Long
と
Dim a As *Long
a = malloc(400)
は同じようにメモリを確保しているようですが、
後者の方が、free関数もあることを考えると行数も増えるし、
気を使いますよね。
あえて malloc が存在するには理由があると思います。
malloc の隠された威力を教えて頂けたらと思い投稿しました。
よろしくお願いします。
malloc はどんなときに?
Re: malloc はどんなときに?
> Dim a[99] As Long
> と
> Dim a As *Long
> a = malloc(400)
>
> は同じようにメモリを確保しているようですが、
> 後者の方が、free関数もあることを考えると行数も増えるし、
> 気を使いますよね。
> あえて malloc が存在するには理由があると思います。
> malloc の隠された威力を教えて頂けたらと思い投稿しました。
はい。隠された威力を教えてさしあげます。
上のようなコードはメモリの静的確保と呼ばれています。たぶん。
上のようなコードはメモリの動的確保と呼ばれています。たぶん...。
このように静的と動的の違いがあります。で、この違いが魅力でしょうか。
静的確保では以下のようなコードが通りません。
しかし動的確保なら大丈夫です。
こういう説明だと分かり辛いかもしれませんが、
エディットボックスのような可変長データを取得することを考えると分かり易いでしょうか。
エディットボックスのデータ量は1KBなのに変数のサイズが256Bだったら入りませんよね?
しかし動的確保ならエディットボックスのデータ量だけ変数のサイズを決めることができます。
えーと、分かって頂けたでしょうか?
> と
> 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では大容量のメモリを用意できます。関数内の変数では,あまり沢山のメモリを使えません。下のプログラムは,おそらくコンパイルして実行するだけで強制終了させられます。
そういうときも,mallocの出番です。
ただ,実際のところ,大容量のメモリ確保にはVirtualAllocが薦められているんですけどね。
コード: 全て選択
Const SIZE = 4 * 1024 * 1024
Sub Proc()
Dim t[ELM(SIZE)] As Byte
End Sub
Proc()
コード: 全て選択
Sub Proc()
Dim t As *Byte
t = malloc(SIZE)
End Sub