可用存储空间会消耗更多剩余内存吗?
Can The Free Storage Consume More Memory Left Over?
int memory()
{
int* p = new int[10000];
}
这会使 10000 个整数无法用于本地内存之类的东西吗? 我不知道是不是这样。
new
用于将请求的内存量(如果可用(分配给您请求的对象/数组变量。在您的情况下,指针p
将存储到此分配的内存块的地址。
只有有限的内存可供您使用,因此您的程序只能使用该内存量。这将因系统而异,但将是有限的。当您请求分配的内存多于可以分配的内存时,程序可能会抛出一些异常,例如std::bad_alloc
,以指示分配存储失败,如果不处理,将导致程序崩溃。
为免费存储分配的内存是否会影响整个 程序的可用内存?
是的。
程序中的内存分配将来自堆存储(C++知道是否为空闲存储(。要回答您的问题,是的,分配的内存将减少可供其他变量使用的可用内存量。没有无限量的内存可供程序使用。因此,一旦用完所有可用空间,您最终可能会耗尽内存空间。但是,您也可以在内存工作完成后释放内存,方法是使用运算符delete
释放已用内存空间并使其再次可用。
分配给您的内存空间将基于实现。C++本身对堆或内存如何分配给它一无所知。
实际上:所有存储都使用内存(除非优化(。
如果分配了 40000 字节,并且操作系统没有 40000 字节可用(加上可用存储用于管理内存的开销(,则操作系统必须采取措施来释放一些内存 - 通常通过终止进程或其他一些进程。此操作可能会延迟到实际使用内存时,而不是在分配时立即延迟。
这些都没有在C++语言中指定,并且是C++语言的实现如何行为的示例。其他实现可能有所不同。
在(便携式(C++中,您真的不知道有多少内存以及它可以用于什么。
new
从免费存储中分配,局部变量在本地存储中分配。然后你有静态存储和线程本地存储(以及其他一些更"神奇"的东西,比如放置异常对象的存储(。
然而,对于C++语言,所有这些内存位置都神奇地来自这些调用或语法结构,每个调用或语法结构都有其特定的语义,例如,您无法知道(可移植地(每种类型有多少内存,并且您无法知道分配一种类型的内存是否会降低另一种类型的可用内存量。也许是,也许不是。
甚至考虑一下,例如对于本地存储,您无法知道是否耗尽了可用的本地内存,因为分配过多本地存储的结果根本无法定义:考虑一下......您无法知道有多少本地内存,但您不能尝试使用超过未知数量的内存,因为系统没有进行任何检查,并且您直接跳入未定义的行为地狱。
因此,例如对于本地存储,唯一实用的建议是不要使用"太多"。
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何在C++类内存结构中创建"spacer"?
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- X 处的指令引用了 Y 处的内存.内存无法读取
- C++ 清除动态阵列中的内存 - 内存无法清除
- 内存泄漏冗余消息
- 我可以使用std::realloc来防止冗余内存分配吗
- 低内存内存管理:查找和跟踪随机函数返回值的重复项