こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

ポインタ渡し

引数の型を、組み込み型にするならポインタ渡しにした方がよいと説明されていました。
ここでいう組み込み型の例を教えて下さい。

投稿日時 - 2006-03-18 11:08:05

QNo.2036347

暇なときに回答ください

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

> typedef unsigned int BYTE;
> こうして定義されたBYTEはここでいう組み込み型になりますか?

YES. unsigned は型を修飾してるだけなので。

投稿日時 - 2006-03-18 12:59:56

ANo.4

#1のかたの回答を補足します。
Cの関数呼び出し手順からこうなります。

関数を呼び出すときは、引数をスタックに積み上げて(pushして)から呼び出し先をコールします。これは、スタックポインタで表現されている場所にコピーすることです。
組込型であれば、最大、longで8バイトですが、ユーザ定義型の場合、structで定義してるでしょうから、そんなに小さいものではありませんよね。とすれば、コピーにも時間がかかるし、何より、限られた領域しか使えない(intel 86系の場合は64Kバイト)スタックを大きく使ってしまいます。スタックは関数呼び出しには必ず使いますから、特定の関数が大きく使ってしまうと、その後、無くなってstack Overflow発生などの原因となります。
ポインタ渡し(call by reference)なら、64ビット空間だとしても一つの引数当たり8バイトですから、時間も短くスタックも浪費しないですね。

投稿日時 - 2006-03-18 12:36:17

ANo.3

#2です。
#1の回答者の方の書かれた内容を見て、ご質問の「組込型」の定義を勘違いして
いたように思います。引数の話でしたね。済みません。

投稿日時 - 2006-03-18 11:40:57

ANo.2

家電製品等の制御用コンピュータです。
最近はあまり聞かなくなった言葉ですが、少し前は「マイコン電子ジャー」とか
いう表現がありました。
家電製品、オーディオ/ビデオ機器、医療機器等、なんでも良いですが、いわゆる
「 パーソナル・コンピュータ 」 とは異なり、部品の一つとして機器内に組み込まれ
その存在を意識しないコンピュータが組込型と呼ばれます。
PCの世界で言うと、BIOSなどは組込型に相当するでしょう。

投稿日時 - 2006-03-18 11:36:48

ANo.1

「組み込み型でないならポインタ渡しにした方がよい」のマチガイではないかしら。

組み込み型とは、言語がハナっから用意してくれてるint,char,doubleなど。
組み込み型でない、すなわちユーザ定義型(ぶっちゃけ struct)だとそのサイズが大きくなると引数の(呼び側から呼ばれ側への)コピーに時間と空間を消費するのです。その点ポインタなら高速/コンパクト。

投稿日時 - 2006-03-18 11:36:26

補足

「組み込み型でないなら」だったかもしれません。
少し日にちが立ったので忘れてきています。

typedef unsigned int BYTE;
このして定義されたBYTEはここでいう組み込み型になりますか?

投稿日時 - 2006-03-18 12:35:18

あなたにオススメの質問