A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
電源を入れる=プログラム開始でシンプルな組み込みプログラムの場合、mallocしたらプログラムは動きっぱなしなのでそもそもfreeしないと思います。
ただ、この様なプログラムの場合、そもそもmallocじゃなくてグローバルな変数領域で事が足りるので使うかどうか疑問があります。それにmalloc自体も処理系依存なので、mallocが出来ない組み込み環境も当然あるわけで、メモリ管理の方法自体がOSや起動方法などの状況によります。アプリが終了してメニューに帰るような組み込み系(携帯電話等)なら当然メモリをfreeしないとやばいのはわかりますよね?
malloc/freeしなければ行けないのは、次のような状況が重なった場合です。
(1)処理するデータを起因として必要とするメモリが可変する。
(2)同時に2種類以上のデータを処理する。あるいは、最低限のメモリで動くように義務付けられたマルチタスクのアプリである。
(3)同時に処理するデータ量の予想最大量でメモリを消費するとメモリが足らない(可変メモリを採用する必然がある)。
(4)次から次へとデータを処理するかメモリを必要とする別プログラムが同時にマルチタスクで動いているため、用が済んだメモリを解放する必要がある。
ただし、仮想記憶が使えない状況(OSやハードの制限)ではメモリのフラグメンテーションが多発しますので、可変長そのものを扱うことに無理がある場合があり、組み込み系でメモリ管理の仕組みの決定はより慎重でなければいけません。
No.4
- 回答日時:
組込みであろうがなかろうが、mallocすればfreeしなければなりません(どのタイミングかは別として)。
ただし、組込みの場合には、使い勝手の悪いmallocそのものではなく、メモリプールなど、別の関数を使って動的なメモリ管理を行うことが多いと思います。
# 一口に組込みといっても、HDDレコーダと自動車と湯沸しポットでは、明らかに勝手が違うと思いますが...
No.3
- 回答日時:
その「誰か」が言われたことは、ある意味当たってるしある意味外れてると思う。
※つか、質問者さんの文章の「行間」に何かありげな気がします。
・当たってる点
確かに一度mallocしたら、放っておいたらfreeはされません(いつの間にかfreeされたら、たまったもんじゃないですよね)。
freeのためにはそれこそ電源を切るしかないです。但しこの行為は、結果的にfreeには違いないけど、意味的に全然違うことですよね。
・外れてる点
一度mallocしても、サイズが決まってようがいまいが、誰か(基本的にmallocした人)がfreeをかければfreeされます。当たり前のことですが...
まとめて言うと、組み込み系には多くの場合メモリ量の限界が意識されるものですが、それとメモリのmalloc,freeは関係在るようであまり関係ありませんよ。
極端な言い方をすれば、「残メモリ>mallocしたいメモリ量」であればmallocできますし(あくまで極論ですよ)、
先にも書いた通り、一度mallocしたメモリは基本的に誰か(普通はmallocした人)がfreeするまでmallocされたままになります。
No.2
- 回答日時:
あなたの聞いた話は、その通りで、スキルのお持ちの方のご意見かと
思います。
組込み系がそうなのは、MMU(ハードウエア的なメモリ管理ユニット)
がない環境がほとんどということも理由のひとつにあります。
組込み系でmallocのような動的にメモリを確保については、本来問題
があります。つまりメモリを確保したり、開放したりを実動作で
実行した場合に一時的にメモリが不足する場合があります。
理由は、メモリを使いすぎた場合もありますが、メモリが穴ぼこ
つまりフラグメンテーションがおきて確保できないことなどが
発生します。組込みシステムではメモリが足らないから空くまで
待つとかいうことがシステムとしては受け入れらない場合が多いです。ですの
でメモリ不足が起こらないようにします。方法としては大きく2つあって
ひとつは不足しないようにメモリを多くつむ。もうひとつは
これは実際には動的確保ではありませんが、プログラムの最初で
必要なメモリをすべて確保してから使うケースで今回のご質問のケース
です。 結局静的に変数を使うのと
同じようですが、プログラミングの構造上テストがしやすかったり
ハードウエア構成上mallocを通したほうがメモリのハンドリングが
しやすい場合があります。
ただ、組込み系でも、ネットワークとかするものの場合には
いわゆるTCP/IPスタックとかは、内部で動的メモリ確保がいくつか
使われているケースがほとんどです。
それからデジカメの画像を本体メモリに保存するタイプとかは
mallocみたいなの(可変長メモリプール)でしている場合も
あります。これって明らかにメモリが不足して撮れなくなってOK
ですから。
No.1
- 回答日時:
>組み込み系ではサイズが決まっている場合
組み込み系じゃなくても上限サイズは決まってる
>電源を切る=メモリ開放
これも組み込みに限らず
>組み込み系ではサイズが決まっている場合、一度mallocすればfreeはしない
mallocの用途からして理解出来てない
基礎から勉強し直した方がいいよ
組み込みをやるには10年早いと思う
この回答への補足
よくわからないですが、
組み込み系じゃなくても上限サイズは決まってるっていうのは
C言語でいう、ヒープ領域が決まってるということですか?
私が言いたかったのは、電源切るまで必要なメモリ領域が動的に変わらない
場合、mallocすればfreeはしないでいいの?ってことです。
最後の文もですけど、なにが理解できてないんでしょうか?
スタック領域に空きがすくないときにmallocでメモリを確保して使うのって
おかしいですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(セキュリティ) セキュリティソフトの切り替え 2 2023/05/04 11:21
- その他(パソコン・周辺機器) Dell Vostro(スリム型)のマザボと電源グラボをそのまんまMiniタワーケースに組み込む 3 2023/07/24 09:38
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- 中学校 喝を入れてください! 5 2022/07/18 17:55
- スピーカー・コンポ・ステレオ Bluetoothスピーカーは自作可能ですか? 1 2022/05/01 18:45
- デスクトップパソコン BIOSが起動しない 7 2023/01/15 18:33
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 会社・職場 みなさんが加入されてる労組もそうですかね 安倍首相の国葬反対の署名をつのったり改憲反対の署名をつのっ 4 2022/08/11 19:08
- プラモデル・鉄道模型・模型製作 sxn-150-05 の組み立て方法を教えてください。 2 2022/07/23 22:30
- IT・エンジニアリング webアプリの開発のみを行なっている企業というのは少ないのでしょうか。 3 2022/05/05 14:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語で、メモリを解放しないで...
-
動的メモリとexit(C言語)
-
Access Violationについて
-
ファイルの読み込みが遅い
-
大容量のメモリ確保をスワップ...
-
「ヒープサイズの設定」て何?
-
メモリのセグメント違反の解決...
-
Apacheでバーチャルホストの最...
-
メモリ内をトレースログに吐きたい
-
VB2005 Datagridview の仮想モ...
-
C言語 昇順・降順 ソート
-
ゲームプログラミングのマップ...
-
C言語初心者です。debug assert...
-
メモリの解放の仕方
-
メモリ負荷試験のツール
-
エクセル キャッシュメモリー...
-
VBAの配列サイズとメモリに関して
-
C++のCopyFileでメモリが増える
-
エクセルのメモリ使用状況/Appl...
-
メモリアロケーション異常の発...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語で、メモリを解放しないで...
-
VBAの配列サイズとメモリに関して
-
「ヒープサイズの設定」て何?
-
エクセルのメモリ使用状況/Appl...
-
エクセルVBA 大容量CSVファイル...
-
EXCEL-VBAにてADOのレコードセ...
-
バッチファイルでの実行EXEのメ...
-
メモリ不足
-
メモリのセグメント違反の解決...
-
メモリが不足しています(VBA)
-
【C言語】再帰が時間がかかる...
-
ファイルマッピング関数で失敗
-
C言語:関数のメモリ上でのサイ...
-
メモリの解放の仕方
-
VC++におけるメモリ使用量について
-
メモリの消費量について
-
Bitmapを重ね合わせる方法
-
メモリを解放しないとどうなる?
-
C#のOutOfMemoryException発生...
-
メモリの解放について VB6 VBA
おすすめ情報