Iphone 检查应用程序是内置于32位还是64位?

Iphone 检查应用程序是内置于32位还是64位?,iphone,ios,Iphone,Ios,如何检查我的应用程序是以32位还是64位编译的 这有助于调试低级代码(例如使用缓冲区)。您可以检查指针的大小。我认为32位是4字节,64位应该是8字节 if( sizeof(void*) == 4 ) then 32bit else 64bit 编译时检查将涉及#ifdef'ing foru LP64_u,这是ARM的数据类型大小标准。运行时解决方案需要检查指针的大小,如下所示: if (sizeof(void*) == 4) { // Executing in a 32-bit en

如何检查我的应用程序是以32位还是64位编译的


这有助于调试低级代码(例如使用缓冲区)。

您可以检查指针的大小。我认为32位是4字节,64位应该是8字节

if( sizeof(void*) == 4 ) then 32bit else 64bit

编译时检查将涉及
#ifdef
'ing for
u LP64_u
,这是ARM的数据类型大小标准。运行时解决方案需要检查指针的大小,如下所示:

if (sizeof(void*) == 4) {
    // Executing in a 32-bit environment
} else if (sizeof(void*) == 8) {
   // Executing in a 64-bit environment
}

谢天谢地,指针大小是编译64位代码的不同标准似乎一致同意的一件事。

为什么需要知道?无论哪种方式,正确编写的代码都可以正常工作。我同意@dpassage。不过,如果需要了解,请检查设备型号@dpassage的评论非常幼稚。对于简单的事情来说是正确的,但当你想为不同的CPU架构优化你的代码时,肯定不是。这不太正确,因为据我所知,iPhone 5S仍将运行32位应用程序。在大多数情况下,几乎不需要对64位处理器进行“优化”,特别是在像Objective-C这样的动态类型的面向对象语言中,内联是不可能的。您需要这样检查的唯一原因是为了进行严肃的数学运算(更适合加速或NEON),或者定义架构无关类型,这些类型在大多数语言的STL中都有很好的表示。int在64位中保留4个字节。哦,这很遗憾,可以尝试sizeof(void)您应该使用NSInteger来尝试。“当构建32位应用程序时,NSInteger是32位整数。64位应用程序将NStigle作为64位整数。”@ LeoNatan,最后,我认为SIEZOF(VULL)是所有编译的最佳选择吗?编译时间。问题在于运行时。仅供参考,
\uu LP64\uu
sizeof()
解决方案都是编译时的。计算sizeof是编译过程的一部分,而不是一个函数。编译器基本上会将sizeof(type)替换为您要编译的系统上该类型的大小。理想情况下,#ifdef和if/else最终编译相同,因为编译器将看到8始终==8,并优化出8==4分支。从技术上讲,您是正确的(但您的论点是基于优化编译器的假设)。也许这更符合“运行时检查”的严格定义。
if (sizeof(void*) == 4) {
    // Executing in a 32-bit environment
} else if (sizeof(void*) == 8) {
   // Executing in a 64-bit environment
}