【发布时间】:2011-06-02 06:20:07
【问题描述】:
在设计一种新的编程语言时,假设 C int 和指针在机器上的大小相同是否安全?
【问题讨论】:
-
可能是堆栈溢出问题。
标签: c pointers language-design
在设计一种新的编程语言时,假设 C int 和指针在机器上的大小相同是否安全?
【问题讨论】:
标签: c pointers language-design
没有。指针的大小可能大于或小于整数。如果您出于某种原因需要将指针作为整数传递(例如执行整数,而不是指针、算术),则可以保证它们适合 intptr_t。
不能保证它们符合另一个答案中建议的 size_t,但实际上它们不太可能不会,因为最大可寻址大小通常等于最大可寻址地址。
【讨论】:
不,一点也不。许多编译器的大小不同。
【讨论】:
不,尤其是在 64 位环境中:
LP64 这涵盖了 *nix 环境,但在 Windows 中同样适用于 LLP64。
【讨论】:
不,但是指针应该与 intptr_t 大小相同。
【讨论】:
size_t 类型。将代码转换为 x64 的主要问题是人们普遍认为 int 大小是相同的,这种做法在多年前已被弃用。
我认为您的意思是由平台而不是 C 语言定义的数据类型的大小。据我所知,C 没有为数据类型定义任何特定的大小。您的问题的答案是您不能假设这一点,例如在 win32 sizeof(int) == sizeof(pointer) == 4 bytes 但是在 win64 sizeof(int) == 4 和 sizeof(pointer) == 8
【讨论】:
没有;在我的 MacOS X 10.6.5 上。机器,int 默认为 32 位,指针默认为 64 位。
如果您还需要一个大小合适的整数来保存指针,请使用#include <inttypes.h>(或<stdint.h>)和uintptr_t - 假设您支持C99,或者可以模拟它。
【讨论】:
我相信 Linux 内核将指针作为 unsigned long 传递。它们保证至少与指针大小相同:)
【讨论】:
__u64 中)。