【问题标题】:C++ memory pool with char array带有 char 数组的 C++ 内存池
【发布时间】: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


【解决方案1】:

内存分配与类型无关,即它是否是 long/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 节 Stan-Ford Programming Paradigm 讲座。在这些讲座中,内存分配的解释非常好。你也可以参考 The C programming language - by Denis Ritchie 的第 8 章

【讨论】:

  • 感谢您的建议,我将在今晚和明天查看视频
猜你喜欢
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 2018-10-21
  • 1970-01-01
相关资源
最近更新 更多