我们学校的项目只允许我们将C程序编译为64位应用程序,并测试我们的程序的速度和内存使用情况。然而,如果我能够使用32位指针,那么我的程序将比64位消耗更少的内存,也可能运行得更快(malloc更快吗?)
我想知道是否可以在64位应用程序中使用32位指针?
谢谢帮助!
我想知道是否可以在64位应用程序中使用32位指针?
谢谢帮助!
使用GCC?
-mx32选项将整型、长整型和指针类型设置为32位,并为x86-64架构生成代码。(英特尔386和AMD x86-64选项):
然后进行基准测试 :)
-m32
和-mx32
是完全不同的模式。x32
生成完全使用64位地址的64位代码。(如果这是作业,那么-mx32
也是不允许的。但在C语言中手动编写代码可能无法优化到只使用地址大小前缀来忽略地址寄存器的高位。) - Peter Cordes你可以“自己动手做”。以下方法可能会稍微降低内存使用,但是它可能无法提高速度,因为您必须将短指针转换为绝对指针,并且这样会增加开销,此外,您将失去大部分类型检查的优势。
它看起来像这样:
typedef unsigned short ptr;
...
// pre-allocate all memory you'd ever need
char* offset = malloc(256); // make sure this size is less than max unsigned int
// these "pointers" are 16-bit short integer, assuming sizeof(int) == 4
ptr var1 = 0, var2 = 4, var3 = 8;
// how to read and write to those "pointer", you can hide these with macros
*((int*) &offset[var1]) = ((int) 1) << 16;
printf("%i", *((int*) &offset[var1]));
通过一些技巧,你可以发明自己的brk()来帮助从偏移量分配内存。
这值得吗?在我看来不值得。