Windows上C++怎么预先分配内存

就是预先分配好物理内存,之后声明变量的时候可以直接使用
比如

int main(){
  AllocateMemeory(1024);//这时候就预定了1024b内存
Obj * a = new Obj();//直接使用上面的内存
}

或者说这样不可行,非要像自己建内存池那么复杂

如果是平凡类, 可以直接用. 其它的需要重载 operator new, 如果不熟悉, 会产生内存泄漏.

#include <new>

struct test
{
    int a;
    int b;
};

int main()
{
    void *mempool = operator new[](sizeof(test) * 5); // operator new

    test *b = new (mempool) test[5]{{11, 10}}; // placement new

    operator delete(mempool); // operator delete

    return 0;
}

该回答引用ChatGPT

在C/C++中,您可以使用诸如malloc()或new等函数来动态分配内存。这意味着在运行时,您可以根据需要动态地请求内存,而不需要在程序运行之前预先分配内存。

但是,如果您希望在程序运行之前预先分配一些内存,您可以使用静态存储分配或全局变量来分配内存。例如,您可以在文件作用域中声明一个全局数组或指针,并将其分配给足够的内存。然后,在程序的其他位置,您可以直接使用该数组或指针。

以下是一个示例:


#include <stdio.h>

// 分配 1024 字节的内存
char buffer[1024];

int main() {
    // 在 buffer 上进行操作
    sprintf(buffer, "Hello, World!");
    printf("%s\n", buffer);
    return 0;
}

在此示例中,我们在程序的全局范围内声明了一个char数组,其大小为 1024 字节。然后,在main()函数中,我们可以直接使用该数组来存储字符串,并使用printf()函数输出。

请注意,如果您需要在程序运行期间动态分配内存,可能需要使用内存池或其他动态内存分配技术来管理内存。

不太清楚你的想法。内存分配问题涉及好几个层次的内容,可以是系统级设置,可以是应用程序组共用设置,可以是应用程序内部使用,可以是服务型组管理应用;有的需要专用的外部命令操作,有的需要专用的服务,有的需要专人值守管理,有的需要专用的负载平衡服务器。看上去,你的需要属于比较简单的应用程序使用需求。但是C语言不允许胡乱占用内存,先占一块内存闲着等需要时再分配使用是不允许的。另外,C语言会在编译时分析内存的使用和管理需求给出合适的解决模型,比如:动态链接库服务代码的内存管理通常需要使用很复杂的池堆模型,却不需要程序员编写额外代码。