32位和64位架构
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了32位和64位架构相关的知识,希望对你有一定的参考价值。
在这里,结果结果是3和1,这对我来说很有意义。但是,当代码在64位架构上运行时,结果变为3和2.你能解释为什么会发生这种情况吗?
#include <stdio.h>
void print(int* a)
{
int len = sizeof(a)/sizeof(a[0]);
printf("%d", len);
}
int main(void) {
int a[]= {11, 22, 33};
int len = sizeof(a)/sizeof(a[0]);
printf("%d
", len);
print(a);
}
答案
64位上的sizeof(int*)
将是8个字节,而32位上只有4个字节。在两种情况下,sizeof(int)
可能是32位。
所以对于32位的情况:
int len = sizeof(a)/sizeof(int); // (12/4) = 3
int len = sizeof(int*)/sizeof(int); // (4/4) = 1
对于64位案例:
int len = sizeof(a)/sizeof(int); // (12/4) = 3
int len = sizeof(int*)/sizeof(int); // (8/4) = 2
也许你对这部分感到困惑:
void print(int* a)
{
int len = sizeof(a)/sizeof(a[0]);
...
}
上面的a
降级为指针,int*
。在它上面使用sizeof
会给你指向数组的指针的大小,而不是数组的内容。
以上是关于32位和64位架构的主要内容,如果未能解决你的问题,请参考以下文章
如何制作同时支持 32 位和 64 位架构的 Android 应用程序?