回答編集履歴

2

コードなどを変更

2017/01/23 11:35

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -8,13 +8,17 @@
8
8
 
9
9
  int main() {
10
10
 
11
+ printf("%d %d %d %d\n",
12
+
11
- printf("%d %d %d\n", sizeof(int), sizeof(int*), sizeof(size_t));
13
+ (int)sizeof(int), (int)sizeof(int*),
14
+
15
+ (int)sizeof(size_t), (int)sizeof(intptr_t);
12
16
 
13
17
  }
14
18
 
15
19
  ```
16
20
 
17
- 結果は`4 8 8`となります。can110さんがおっしゃるようにintは「そのプラットフォームでの自然な語長」ではありますが「そのプラットフォームでのメモリーの空間を完全に表現できるビット数」とは定義されていません。そうした目的には`size_t`が妥当と言えると思います。
21
+ 結果は`4 8 8 8`となります。can110さんがおっしゃるようにintは「そのプラットフォームでの自然な語長」ではありますが「そのプラットフォームでのメモリーの空間を完全に表現できるビット数」とは定義されていません。そうした目的には`size_t`(訂正: intptr_t)が妥当と言えると思います。
18
22
 
19
23
 
20
24
 
@@ -27,3 +31,7 @@
27
31
  raccyさんのコメントみて気づきましたがsize_tではなくてintptr_t/uintptr_tが空間サイズを表現するのに適切な型のようでした。失礼しました。
28
32
 
29
33
  size_tは空間の大きさを表現するものという定義ではなく配列の指標、構造のサイズ、プログラム内の最大のメモリオフセットの保持が可能という意味あいのものでほぼ空間サイズとして使えると思っていたのですがズバリintptr_t/uintptr_tの定義が空間サイズなんですね。
34
+
35
+ 追記:
36
+
37
+ ついでに上のコードで"%d"でsize_t型を印字しようとしているのが怪しいので直しました。

1

訂正

2017/01/23 11:35

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -15,3 +15,15 @@
15
15
  ```
16
16
 
17
17
  結果は`4 8 8`となります。can110さんがおっしゃるようにintは「そのプラットフォームでの自然な語長」ではありますが「そのプラットフォームでのメモリーの空間を完全に表現できるビット数」とは定義されていません。そうした目的には`size_t`が妥当と言えると思います。
18
+
19
+
20
+
21
+ ---
22
+
23
+
24
+
25
+ 訂正:
26
+
27
+ raccyさんのコメントみて気づきましたがsize_tではなくてintptr_t/uintptr_tが空間サイズを表現するのに適切な型のようでした。失礼しました。
28
+
29
+ size_tは空間の大きさを表現するものという定義ではなく配列の指標、構造のサイズ、プログラム内の最大のメモリオフセットの保持が可能という意味あいのものでほぼ空間サイズとして使えると思っていたのですがズバリintptr_t/uintptr_tの定義が空間サイズなんですね。