C++写一个读写操作内存的队列代码
时间: 2024-03-15 07:44:05 浏览: 130
一个c++11实现的无锁队列.zip
以下是一个简单的读写操作内存的队列代码示例,其中使用了STL中的queue容器和vector容器:
```cpp
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
// 定义一个内存块结构体
struct MemoryBlock {
int size;
char* data;
};
// 定义一个内存队列类
class MemoryQueue {
public:
// 构造函数
MemoryQueue(int blockNum, int blockSize) {
// 初始化内存池
for (int i = 0; i < blockNum; i++) {
MemoryBlock block;
block.size = blockSize;
block.data = new char[blockSize];
freeBlocks.push(block);
}
}
// 析构函数
~MemoryQueue() {
// 释放所有内存块
while (!freeBlocks.empty()) {
MemoryBlock block = freeBlocks.front();
freeBlocks.pop();
delete[] block.data;
}
while (!usedBlocks.empty()) {
MemoryBlock block = usedBlocks.front();
usedBlocks.pop();
delete[] block.data;
}
}
// 从内存池中获取一个内存块
MemoryBlock allocate() {
if (freeBlocks.empty()) {
// 内存池中没有空闲块,需要从已使用块中获取
MemoryBlock block = usedBlocks.front();
usedBlocks.pop();
return block;
} else {
// 内存池中有空闲块,直接返回
MemoryBlock block = freeBlocks.front();
freeBlocks.pop();
usedBlocks.push(block);
return block;
}
}
// 归还一个内存块到内存池中
void deallocate(MemoryBlock block) {
usedBlocks.pop();
freeBlocks.push(block);
}
private:
queue<MemoryBlock> freeBlocks; // 空闲内存块队列
queue<MemoryBlock> usedBlocks; // 已使用内存块队列
};
int main() {
// 初始化内存队列
MemoryQueue memQueue(10, 1024);
// 从内存队列中获取一个内存块
MemoryBlock block = memQueue.allocate();
cout << "allocate a memory block of size " << block.size << endl;
// 对内存块进行读写操作
for (int i = 0; i < block.size; i++) {
block.data[i] = i % 256;
}
// 将内存块归还到内存队列中
memQueue.deallocate(block);
cout << "deallocate the memory block" << endl;
return 0;
}
```
上述代码中,定义了一个MemoryBlock结构体,表示内存块的大小和数据。定义了一个MemoryQueue类,表示内存队列,其中包含了两个队列:freeBlocks表示空闲内存块队列,usedBlocks表示已使用内存块队列。在构造函数中,初始化了一个内存池,即一系列空闲内存块,可以通过allocate函数从内存池中获取一个内存块,使用完毕后再通过deallocate函数归还到内存池中。在main函数中,演示了从内存队列中获取一个内存块、进行读写操作、归还内存块的过程。
阅读全文