声明数组但不进行物理分配

时间:2014-11-18 10:44:20

标签: c arrays linker allocation

我不知道这是否可行但是我试图定义但不分配(声明)一个数组,主要是因为我需要保持与使用三维数组的现有代码的兼容性。 这个"阵列"实际上是一个指向特定内存地址的指针,在那里我映射了外部图形控制器的视频内存,很明显我可以声明一个指向我特定地址内存的指针:

unsigned int* PlaneSecondary = (unsigned int*)_Lime_PPC_Base_;

但是通过这种方式,我应该通过指针算法访问PlaneSecondary,而我之前存在的代码并没有这样做。

我设法在特定的绝对地址中定义和声明一个数组:

#pragma push
#pragma section ".LIME_Plane_section" ".LIME_Plane_section"
unsigned int __attribute__((section (".LIME_Plane_section"))) PlaneSecondary[_Lime_n_layers][_Lime_Y_res][_Lime_X_res];
#pragma pop

.lcf的一部分:

 lime_mem  : origin = 0x60000000, length = 0x01000000 //16MB ram LIME R/W
 /* .... */
 .LIME_Plane_section 0x60000000 : 
     { 
     } > lime_mem

但是这样,当我真的不需要时,编译器会为我的PlaneSecondary物理分配一些空间。

如果这是可能的,我猜我错过了.lcf或PlaneSecondary上的某些属性。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以定义指向数组的指针:

unsigned int (*PlaneSecondary)[_Lime_Y_res][_Lime_X_res] = (void*)_Lime_PPC_Base_;

然后你可以访问它:

PlaneSecondary[layer][y][x]