【发布时间】:2013-02-23 07:32:02
【问题描述】:
我有一个关于 char 数组在内存池方面的工作方式以及为它分配其他变量类型的指针的快速问题。我正在做一个使用 char 数组作为内存池的分配,我需要能够分配指向它的指针,我已经阅读了一些关于该主题的信息,但不太了解实际分配的工作原理如:
const int poolSize = 60000;
char pool[poolSize];
void* allocate(int aSize)
{
//.....
return ((void*) 0);
}
long* pointer;
pointer = (long *) allocate(sizeof(long));
*pointer = 0xDEEDEEEF;
我只是不太明白它是如何工作的,因为 char 是 1 个字节,而 long 应该是 4,所以当我需要将数组中的 4 个点分配给一个 long 指针变量时,这样的事情是如何工作的?也可以随意给出示例和解释,但请不要泄露整个程序应该如何工作,因为一旦我完全理解了这部分的工作原理,我想自己弄清楚。谢谢
【问题讨论】:
-
除了
pool,您还需要一些方法来跟踪使用了哪些字节。然后allocate可以找到aSize可用的连续字节,返回指向它开头的指针,并将这些字节标记为已使用。 -
因此,如果我要做一些事情,例如将池中的所有点初始化为字符“F”,那么我可以连续检查一定数量的 F,以知道它们是空的,并且将它们设置为“T”或其他东西以将它们标记为已填充,然后这将允许我跟踪它。像这样或其他方式初始化它们会更好吗?那么对于解除分配,我是否只需返回指向集合的第一个字节和变量的指针,然后返回并将其使用的字节再次标记为空闲?
-
你应该看看 C++ 分配器的概念。
标签: c++ arrays memory char pool