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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# ポインタの型変換、どうやるんでしたっけ? 2 2022/03/28 11:00
- C言語・C++・C# C言語 配列とポインタについて 2 2022/06/02 11:53
- C言語・C++・C# C言語で構造体の参照渡しができません 2 2022/12/18 21:22
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- その他(ブラウザ) Microsoft edgeのスクロールバーについて 2 2022/09/19 16:56
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- デスクトップパソコン 全画面表示でもタスクバーを前面に隠す、表示させるようにしたい 3 2022/03/23 12:30
- C言語・C++・C# 双方向リスト 1 2023/06/28 04:16
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、写真のプログラムをどう直せ 2 2022/07/09 21:13
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラマーです。このDB設計...
-
0 == False はいいけど
-
プログラム言語について c言語...
-
プログラミングでArduinoのc++...
-
Python、プログラミングについ...
-
swift言語の最適化 swift最適化...
-
C言語関数違いについて。
-
右ビットシフト
-
応用情報技術者試験の令和元年...
-
なんで
-
だれがとけるの?
-
C#,vb.netで業務用アプリ開発と...
-
へんな現象
-
プログラミングについて。 1つ...
-
システムエンジニアの適正について
-
c言語
-
C++でデスクトップGUIアプリ開...
-
VisualStudioでのプログラミン...
-
C言語って古いですか?
-
C言語です
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Linux Cプログラミングを学ぶた...
-
右ビットシフト
-
プログラミングについて。 1つ...
-
応用情報技術者試験の令和元年...
-
へんな現象
-
インクリメント演算子のみを用...
-
C#,vb.netで業務用アプリ開発と...
-
gccを行ってもexeファイルが生...
-
Notepad++の関数リスト表示の変...
-
c言語
-
C言語をコンパイルするとコンピ...
-
mallocについて
-
だれがとけるの?
-
C言語 列挙型(enum型)変数について
-
Windows formアプリで データグ...
-
これなにがちがうんですか??
-
VisualStudio2022でC言語プログ...
-
大量のデータを読み込んで表示...
-
プログラミングについての質問...
-
MACで動く実行ファイルをWindow...
おすすめ情報