(分配的資料可以是任何型別 - int、char 等。)
我得到的紙張大小為 1024 位元組,最多 5 張。我需要制作某種動態分配的結構(或結構),將所有資料保存在一個地方并將其分成塊。所以我基本上需要在一個結構中分配 1024 位元組(或者可能是我擁有的所有空間,1024x5 位元組),并以不同的方式使用給定的記憶體塊。如果作業表記憶體不足,我需要分配一個新的。
所以我的問題是:C 中最適合這份作業的結構是什么?我在考慮 char* 或 void* 的向量,或者是 char* 或 void* 的經典 c 陣列,但不太確定。如果它是一個陣列,我想知道我是否可以創建一個陣列 [5] 并只分配第一個元素,而第一個元素將是指向 1024 位元組記憶體的指標?
以下是將使用該結構完成的功能(它是垃圾收集器的簡單實作):
1.分配給定大小的記憶體塊并回傳指向該記憶體的指標
2.給定“void *region”屬性釋放一塊記憶體
3.使用給定的“void *region”和大小增加塊的大小以增加到
4.用給定的“void *region”減小塊的大小和大小以減小到
- 將已分配記憶體塊的資訊寫入檔案
注意:所有的函式都在一個類垃圾收集器中,并且都是 void 型別的靜態函式(除了第一個,它是 void* 型別,因為它回傳一個指向新分配塊的指標)
注2:頁面在機器記憶體中不是一個接一個分配的,所以它們有不同的地址,它們只在需要時分配(當空間用完時)
uj5u.com熱心網友回復:
我會從這樣的事情開始:
#include <array>
#include <memory>
#include <iostream>
template<std::size_t N>
struct heap_t
{
public:
// todo add your memory managment
// using templates like
template<typename type_t>
type_t* allocate()
{
// use sizeof(type_t) etc...
return nullptr;
}
template<typename type_t>
void free(type_t* ptr)
{
// more logic here.
}
private:
std::array<char, N> m_memory{0}; // initialize all memory to 0
};
int main()
{
constexpr std::size_t heap_size{ 256ul };
// to avoid allocating heap on the stack use make_unique
auto heap = std::make_unique<heap_t<heap_size>>();
auto value_ptr = heap->allocate<int>();
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/388765.html
上一篇:我必須在C 中定義默認建構式嗎?
下一篇:C 完美轉發功能
