C++中的内存碎片

Memory Fragmentation in C++

本文关键字:内存碎片 C++      更新时间:2023-10-16

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

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

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

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

这是个糟糕的主意。不要使用非类型化内存,也不要像在PHP中那样玩得又快又松,因为C++对草率编程的容忍度较低。

我建议你读一本C++入门教材,里面会解释类型和类之类的东西,你可以用它们来避免处理非类型化的内存。

编辑:从上面的评论来看,您似乎想学习指针算术。

不要使用指针算术*

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

请阅读我的评论,我认为您需要了解更多关于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精确位置),vur这样做几乎在所有方面都很糟糕。