9

我们学校的项目只允许我们将 c 程序编译成 64 位应用程序,他们测试我们的程序的速度和内存使用情况。但是,如果我能够使用 32 位指针,那么我的程序将消耗比 64 位更少的内存,也可能它运行得更快(比 malloc 更快?)

我想知道是否可以在 64 位应用程序中使用 32 位指针?

谢谢您的帮助

4

2 回答 2

35

使用 GCC?

-mx32 选项将 int、long 和指针类型设置为 32 位,并为 x86-64 体系结构生成代码。(英特尔 386 和 AMD x86-64 选项):

然后进行基准测试:)

于 2012-04-10T06:22:57.597 回答
0

你可以“滚动你自己”。以下内容可能会减少内存使用量 - 略微减少 - 但它可能不会提高速度,因为您必须将短指针转换为绝对指针,这会增加开销,而且您也会失去类型检查的大部分好处。

它看起来像这样:

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() 来帮助从偏移量分配内存。

这值得么?国际海事组织编号

于 2012-04-10T06:10:53.043 回答