- 締切済み
ポインタ渡し
引数の型を、組み込み型にするならポインタ渡しにした方がよいと説明されていました。 ここでいう組み込み型の例を教えて下さい。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> typedef unsigned int BYTE; > こうして定義されたBYTEはここでいう組み込み型になりますか? YES. unsigned は型を修飾してるだけなので。
- ultraCS
- ベストアンサー率44% (3956/8947)
#1のかたの回答を補足します。 Cの関数呼び出し手順からこうなります。 関数を呼び出すときは、引数をスタックに積み上げて(pushして)から呼び出し先をコールします。これは、スタックポインタで表現されている場所にコピーすることです。 組込型であれば、最大、longで8バイトですが、ユーザ定義型の場合、structで定義してるでしょうから、そんなに小さいものではありませんよね。とすれば、コピーにも時間がかかるし、何より、限られた領域しか使えない(intel 86系の場合は64Kバイト)スタックを大きく使ってしまいます。スタックは関数呼び出しには必ず使いますから、特定の関数が大きく使ってしまうと、その後、無くなってstack Overflow発生などの原因となります。 ポインタ渡し(call by reference)なら、64ビット空間だとしても一つの引数当たり8バイトですから、時間も短くスタックも浪費しないですね。
- kaZho_em
- ベストアンサー率50% (2950/5879)
#2です。 #1の回答者の方の書かれた内容を見て、ご質問の「組込型」の定義を勘違いして いたように思います。引数の話でしたね。済みません。
- kaZho_em
- ベストアンサー率50% (2950/5879)
家電製品等の制御用コンピュータです。 最近はあまり聞かなくなった言葉ですが、少し前は「マイコン電子ジャー」とか いう表現がありました。 家電製品、オーディオ/ビデオ機器、医療機器等、なんでも良いですが、いわゆる 「 パーソナル・コンピュータ 」 とは異なり、部品の一つとして機器内に組み込まれ その存在を意識しないコンピュータが組込型と呼ばれます。 PCの世界で言うと、BIOSなどは組込型に相当するでしょう。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
「組み込み型でないならポインタ渡しにした方がよい」のマチガイではないかしら。 組み込み型とは、言語がハナっから用意してくれてるint,char,doubleなど。 組み込み型でない、すなわちユーザ定義型(ぶっちゃけ struct)だとそのサイズが大きくなると引数の(呼び側から呼ばれ側への)コピーに時間と空間を消費するのです。その点ポインタなら高速/コンパクト。
補足
「組み込み型でないなら」だったかもしれません。 少し日にちが立ったので忘れてきています。 typedef unsigned int BYTE; このして定義されたBYTEはここでいう組み込み型になりますか?