2012-09-08 134 views
0

是否可以強制gcc將數組存儲在特定的段中?GCC全局變量存儲

我想這

static const Host_Vtable_Entrty Host_vtable[]= 
{ 
{"Window_create",(Function)Window_create} 
,{"Window_cropEllipse",(Function)Window_cropEllipse} 
,{"Window_cropRect",(Function)Window_cropRect} 
,{"Window_cropRectRound",(Function)Window_cropRectRound} 
,{"Window_destroy",(Function)Window_destroy} 
,{"Window_filenameGet",(Function)Window_filenameGet} 
,{"Window_filenameGet",(Function)Window_messageBox} 
,{"Window_move",(Function)Window_move} 
,{"Window_styleSet",(Function)Window_styleSet} 
}; 

要存儲在只讀地方,但它被放在數據段:

.data 
.align 32 
_ZL11Host_vtable: 
.quad .LC0 
.quad _Z13Window_createP6WindowP6ObjectPFyS2_PjyyEPFyS2_yPvE 
.quad .LC1 
.quad _Z18Window_cropEllipseP6Windowjdddd 
.quad .LC2 
.quad _Z15Window_cropRectP6Windowjdddd 
.quad .LC3 
.quad _Z20Window_cropRectRoundP6Windowjdddddd 
.quad .LC4 
.quad _Z14Window_destroyP6Window 
.quad .LC5 
.quad _Z18Window_filenameGetPcyPKcS1_j 
.quad .LC5 
.quad _Z17Window_messageBoxP6WindowPKcS2_j 
.quad .LC6 
.quad _Z11Window_moveP6Windowdddd 
.quad .LC7 
.quad _Z15Window_styleSetP6Windowjj 

我需要手動編寫組件?

+0

如果你解釋爲什麼你想這樣做,這將有所幫助。 –

+0

如果這些函數指針被覆蓋,則生成程序SIGSEGV。 – user877329

+0

如果它是隻讀空間,它將如何重新定位?您在那裏有功能,其地址在段創建時不知道。 –

回答

1

如果您在GCC文檔中搜索該語言的GCC特定擴展,您將偶然發現描述variable attributes的文檔。在這裏您可以找到一個名爲segment的屬性,並提供有關如何使用它的示例。