2011-01-19 60 views
1

對於我正在使用的類,我們需要開發分配實用程序。分配地址的實例化結構(分配分配)

除了安全之外,我將使用遠指針來接收和分配某些結構的地址。我也不允許在這項任務中使用「memalloc」。

我提到:Linked Lists in C without malloc 瞭解如何在不使用memalloc的情況下製作鏈接結構。但是,我需要知道如何將新實例分配給特定地址。例如,如果我有一個起始指針指向地址0x5000,我想創建我的列表,以便我可以使用增量偏移量(比如說256)來啓動我的下一個結構(地址方面)256字節我的出發點。

此作業基於熟悉分割和x86架構。

任何幫助表示讚賞!

回答

3

取決於你想要做什麼,你可能需要使用以下工具的組合:

安置新:您可以通過使用以下語法構建在特定內存位置的物體:

new (reinterpret_cast<void*>(0x500)) MyObject(/* ...ctor args... */); 

這不會分配任何新的內存;相反,它只是使用指定的內存地址作爲接收者對象調用構造函數。小心對齊限制!

自定義分配器。您可以在std::allocator<T>的行上定義一個新類,用於在您指定的位置保留記憶。然後,您可以創建STL容器,在您想要的位置自動使用內存。

+0

嗨,謝謝你的迴應。 我需要澄清一些事情。除了我創建的工具之外,我不允許使用分配工具。所以沒有新的,刪除,免費等... 我更希望能夠做的是創建一個指針,指向某個地址,然後在我的指針引用的指向地址創建變量和數據結構。 – MHZ 2011-01-19 04:21:21

+0

讓我進一步回答這個問題。 是否可以拒絕地址並將其轉換爲數據類型? – MHZ 2011-01-19 04:26:48

0

我剛剛收到來自我的教授的電子郵件,我不允許使用「新」操作符。只是爲了仔細檢查你告訴我的情況,我可以再問一下這個例子:

struct example{ 
    int a; 
    struct example *next; 
}; 

void *ptr; 
ptr = 0x5000; 
ptr = &((example)*ptr); 

或者說,