C ++中的内存碎片

时间:2012-03-01 21:55:41

标签: c++ memory-fragmentation

我想使用malloc()/ new为变量m分配256KB内存。 然后,使用m存储字符串和数字等数据。 我的问题是如何将数据保存到m并检索它们。

例如,如何将int 123456存储在偏移0到3中并将其读取到变量x? 或者从偏移4到8(或9与\ 0)存储“David”字符串,然后将其检索到变量s?

2 个答案:

答案 0 :(得分:1)

您可以通过转换指针来存储整数。

unsigned char *p = new unsigned char[256 * 1000];
*(int *) p = 123456;
int x = *(int *) p;

这是一个糟糕的主意。不要使用无类型的内存,也不要像在PHP中那样快速和松散地玩,因为C ++不太容忍草率编程。

我建议阅读一本介绍性的C ++教科书,它将解释类型和类之类的东西,你可以用来避免处理无类型的内存。

编辑:从上面的评论中,您可能希望了解指针算法。

不要使用指针算术*。

*除非你保证你知道自己在做什么。

答案 1 :(得分:0)

请阅读我的评论,我想您需要了解更多有关C和低级本机程序的信息。

该格式是否有特定申请?

将结构分配给内存你可以做类似的事情

struct my_format{
    int first;
    char second[5];
};

int main()
{
     struct my_format *mfp=
          malloc(sizeof(struct my_format));
     mfp->first=123456;
     free(mfp);
}

或者其他任何不涉及内存细节(IE的确切位置的vars)vur这样做几乎在所有方面都很糟糕。