No.7ベストアンサー
- 回答日時:
PIC等のマイクロコンピュータでは、メモリモデルにより違いますが、16ビットと24ビットがポインタのサイズでした。
(参考URLをご覧下さい)
「C言語では」と聞かれると、処理系(CPU,アーキテクチャ,コンパイラ,OS)に依ってマチマチになりますし、
「これこれの処理系」と聞かれれば、こうです、と定まった答えが出ます。
C言語は高級言語の皮をかぶったアセンブラみたいなものですから、不親切に思える「なぜ、なに」がたくさん出てきます。
Cの言語仕様とライブラリAPIを超えた範囲にも目を向けて勉強していただきたいと思います。
(特にCPUとメモリ、スタックの使われ方など)
参考URL:http://ww1.microchip.com/downloads/en/DeviceDoc/ …
この回答へのお礼
お礼日時:2007/01/02 22:41
回答どうもありがとうございます!
詳しい解説ありがとうありがとうございます。
自分には難しそうですが、参考になります!
ありがとうございます!
No.11
- 回答日時:
失礼。
longだとLONG_MINには拘束されますね。(ISO/IEC14882 $18.2.2, ISO/IEC9899 $5.4.2.1あたり)
# 蛇足:intptr_t等の定義はC99以降、現状では処理系を選びます。
# (とはいえstdint.hくらいなら仕様片手に自作できるでしょうが)
No.10
- 回答日時:
確かに個々の型の大きさは処理系定義ですが, 最低の大きさが規格にあります. で, long は最低 32bit なので「long が 24bit」はアウトです>#9
あと, 「どうしてもポインタの値を整数型の変数に入れたい」というときには intptr_t または uintptr_t を使うのがベスト.
No.9
- 回答日時:
> この型名は規格上は OK なんでしょうか?
これがもしも「shortが24bit」または「longが24bit」なら処理系定義なのでOKですが、
「short long」という型名は言語仕様的には違反ですね。
「標準の型を提供。さらに、独自の型を提供」という説明ですし、
処理系の独自拡張ということになると思います。一般性はありません。
No.8
- 回答日時:
#7 さんの参考 URLを見ると,short long 型 (24ビット) なんてのがあるんですね! (11ページ)
この型名は規格上は OK なんでしょうか?
No.5
- 回答日時:
常に同じである保証がないのは、既に書かれている通りです。
言語仕様上のサイズ保証はありませんし、クラスメンバのポインタが別サイズとかもありえます。
ポインタと整数のマッピングはimplementation-definedなので、
基本的には処理系(通常はコンパイラ)が決定します。
そのCPU上でもっとも効率的なサイズを使うのが普通ですが、
例えばvoid*へのキャスト時などにコンパイラが変換コードを
生成するなどの手段もないとはいえません。
# Win32等しか使ってないと、大抵4なので常に4だと思っちゃう人もいますし、
# 全てのポインタサイズを4にしてるコンパイラもあるので、
# 見かけた情報は何らかの条件が付いていたのかもしれません。
No.4
- 回答日時:
この説明がなされる前に、なにか限定条件がついていませんでしたか?
すでにいくつか例も挙がっていますが、ほかにも
char * と その他のポインタ型でサイズの違う環境がありました
(多分現役ではないので過去形)。
ですから、いついかなる場合でもなりたつというものではありません。
また、64bit CPUが使われている環境の場合、int は 64bitではなく
32bitのままというものもありますので(たとえばWindowsがそう)、
int のサイズがポインタのサイズと常に等しいということもありません。
No.3
- 回答日時:
プログラム用のメモリとデータ用のメモリが分かれているプロセッサでは,
データ (int,char,double 等) へのポインタと,プログラム (関数) への
ポインタのサイズが異なる場合があります.
16ビット時代の x86 はプログラム用とデータ用のメモリのサイズがそれぞれ,
・64KB 未満 (ポインタは2バイト)
・64KB 以上 (ポインタは4バイト)
の2つの場合があり,4通りの組合せ (それぞれをメモリ・モデルと呼んでいた) が
ありました.どのメモリ・モデルを使用するかは,プログラムのサイズと扱うデータ量
に応じて決定していました.
現在でも,DSP (デジタルシグナルプロセッサ) のようにプログラムメモリと
データメモリが分かれているプロセッサではそうなっている可能性があります.
(DSP を使ったことがないのでわかりませんが.)
デジタルシグナルプロセッサ (Wikipedia)
http://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B8% …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#でログファイルにファイルパ...
-
c言語
-
大量のデータを読み込んで表示...
-
gccを行ってもexeファイルが生...
-
UART通信の取説で,left floati...
-
PC画面を録画するプログラムでd...
-
C言語について。
-
Windows Formアプリからコンソ...
-
プログラムを斜めに並べる
-
今ってプログラミング言語は何...
-
コンソールアプリを作成するの...
-
【C言語】全角文字の配列を、全...
-
C# DatagridviewにExcelシート...
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
-
バッチファイルで以下のような...
-
インクリメント演算子のみを用...
-
mallocについて
-
システムエンジニアの適正について
-
どちのほうがすきですか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どうして+3
-
プログラミング言語についてc++...
-
今ってプログラミング言語は何...
-
2つほどお聞きしたいことがあり...
-
次の記述について
-
パソコン
-
バッチファイルで以下のような...
-
大量のデータを読み込んで表示...
-
c言語
-
Windows Formアプリからコンソ...
-
gccを行ってもexeファイルが生...
-
VisualStudio2022でC言語プログ...
-
UART通信の取説で,left floati...
-
C#でTreeViewのCheckBoxのサイ...
-
10進数からN進数に変換するプロ...
-
Python、プログラミングについ...
-
[C言語]fputsとfprintfの違い
-
0 == False はいいけど
-
VisualStudioで、コードを印刷...
-
逆コンパイルと逆アセンブルの...
おすすめ情報