2013-02-23 146 views
0

我只是有一个关于char数组如何处理内存池并为其分配其他变量类型的指针的快速问题。我正在处理一个使用char数组作为内存池的任务,并且我需要能够为它分配指针,并且我已经阅读了关于该主题的一些信息,但我不完全理解实际分配如何工作的一部分如:使用char数组的C++内存池

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个字节,而长应该是4和它是如何与这样的工作时,我需要分配在4个点数组到一个长指针变量?也可以随意给出例子和解释,但请不要放弃整个程序应该如何工作,因为一旦我明确了解这个部分是如何工作的,我想自己弄明白。谢谢

+0

除了你的'pool',你需要一些方法来跟踪哪些字节被使用。 'allocate'然后可以找到'aSize'可用的连续字节,将指针返回到它的开头,并将这些字节标记为已使用。 – 2013-02-23 07:40:41

+0

因此,如果我要做一些事情,例如初始化池中的所有点到字符'F',例如,然后我可以检查连续的一定数量的F来知道它们是否为空,并将它们设置为'T'或别的东西来标记他们填充然后这将允许我跟踪这个。像这样或者其他方式初始化它们会更好吗?然后,为了解除分配,我只是返回一个指向该集合的第一个字节和变量的指针,然后返回并将其使用的字节标记为空闲的? – zfetters 2013-02-23 07:47:23

+0

你应该看看C++分配器的概念。 – 2013-02-23 08:53:33

回答

2

内存分配是独立的类型,即是否长/ char.etc但事情是,它是量化的“字节”。 char是唯一需要一个字节内存的数据类型。

它在你的程序中如何处理分配的内存。例如

char s[4]={0,0,0,'A'}; 
int *p = (int*)s; //treating those 4 bytes as int 
printf("%d",*p); //will print 65 

我会建议你先看4-5斯坦福特编程范式讲座。内存分配在这些讲座中解释得非常好。你也可以参考C编程语言的第8章 - by Denis Ritchie

+0

感谢您的建议,我会查看今晚和明天的视频 – zfetters 2013-02-23 07:51:58