c++ - 铸造一个结构
问题描述
我目前正在学习内存池实现。问题是我不太了解下面的类型转换方式:
b3BlockPool::b3BlockPool(u32 blockSize)
{
m_blockSize = blockSize;
m_chunkSize = b3_blockCount * m_blockSize;
m_chunks = NULL;
m_chunkCount = 0;
// Pre-allocate some chunks
b3Chunk* chunk = (b3Chunk*)b3Alloc(sizeof(b3Chunk) + m_chunkSize);
++m_chunkCount;
chunk->freeBlocks = (b3Block*)((unsigned char*)chunk + sizeof(b3Chunk)); //here
}
在最后一行,块指针首先被转换为 unsigned char*,这是为什么呢?
为什么我们不能这样做呢?
chunk->freeBlocks = (b3Block*)(chunk + sizeof(b3Chunk));
这是 .h 文件以获取更多信息:
// Number of blocks per chunk.
const u32 b3_blockCount = 32;
// A pool of memory blocks.
class b3BlockPool
{
public:
b3BlockPool(u32 blockSize);
~b3BlockPool();
void* Allocate();
void Free(void* p);
private:
struct b3Block
{
b3Block* next;
};
struct b3Chunk
{
b3Block* freeBlocks;
b3Chunk* next;
};
u32 m_blockSize;
u32 m_chunkSize;
b3Chunk* m_chunks;
u32 m_chunkCount;
};
解决方案
推荐阅读
- php - Codeigniter 路由抛出 404 page not found 错误
- reactjs - 无法从库中导入反应组件
- wix - 如何在不使用 c# 的情况下使用 wix 安装程序将 .msi 安装到远程虚拟机
- jquery - jQuery比较表单输入数组,颜色差异
- reactjs - 滑动最近在 Chrome 移动设备上停止工作
- node.js - 如何将 Node.js 应用程序正确连接到 Cassandra 节点?
- python - 为什么dask不并行执行
- react-native - setState 在一个消耗大量内存的时间间隔内
- hadoop - java.lang.NoSuchMethodError:org.apache.hadoop.io.retry.RetryUtils.getDefaultRetryPolicy
- c++ - C++字符串变量问题(_ZNSt7_cxx1112)在动态链接库中找不到