首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当更多的内存分配完成时,为什么程序使用的内存没有改变?

当更多的内存分配完成时,程序使用的内存没有改变的原因可能有以下几种可能性:

  1. 内存分配是虚拟内存管理系统的工作。虚拟内存是一种内存管理技术,它将物理内存和虚拟内存地址进行映射,使得程序可以使用比实际物理内存更大的地址空间。当程序申请更多的内存时,虚拟内存管理系统可以分配更多的虚拟内存地址,但并不一定会立即分配物理内存。因此,即使程序请求了更多的内存,实际分配给程序的物理内存可能没有改变,而程序使用的内存也没有改变。
  2. 内存分配是按需分配的。当程序申请内存时,操作系统并不会立即分配物理内存给程序,而是将申请的内存标记为可用状态,只有当程序开始使用该内存时,操作系统才会真正分配物理内存。因此,即使程序请求了更多的内存,但如果程序没有开始使用该内存,实际分配给程序的物理内存可能没有改变,而程序使用的内存也没有改变。
  3. 内存分配的粒度较大。内存分配是以页为单位进行的,每个页的大小通常是4KB或者更大。当程序申请内存时,操作系统会分配整个页给程序,即使程序只使用了其中的一小部分内存。因此,即使程序请求了更多的内存,但实际分配给程序的页数没有改变,而程序使用的内存也没有改变。

总结起来,当更多的内存分配完成时,程序使用的内存没有改变可能是由于虚拟内存管理、按需分配和内存分配粒度等原因导致的。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • free函数的用法和注意事项

    1. 只能释放由malloc、calloc、realloc函数分配的内存空间,不能释放其他类型的内存。 2. 不能释放已经被释放过的内存。 3. 释放内存后,不要再使用该内存空间,否则会导致未定义的行为。 4. 传递给free函数的指针必须是动态分配的指针,不能是静态分配的指针或栈上的指针。 5. free函数并不会改变指针的值即不会将指针设置为`NULL,只是释放指针指向的内存空 6. 不建议频繁地调用free函数,可以尽量将多个内存释放操作合并到一起,以避免频繁的内存分配和释放操作带来的性能损失。对同一个内存块多次调用`free()`函数是非法的,可能导致程序崩溃或其他未定义行为。 - 释放已经释放过的内存块也是非法的,同样可能导致程序崩溃或其他未定义行为。 - 在释放内存块之前,应该确保不再使用该内存块的指针。

    01

    容易混淆的const

    (1)可以定义const常量,具有不可变性。   例如:const int Max=100; Max++会产生错误; (2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。   例如: void f(const int i) { …} 编译器就会知道i是一个常量,不允许修改; (3)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 还是上面的例子,如果在函数体内修改了i,编译器就会报错;   例如: void f(const int i) { i=10;//error! } (4) 可以节省空间,避免不必要的内存分配。 例如:   #define PI 3.14159 //常量宏   const double Pi=3.14159; //此时并未将Pi放入ROM中 …   double i=Pi; //此时为Pi分配内存,以后不再分配!   double I=Pi; //编译期间进行宏替换,分配内存   double j=Pi; //没有内存分配   double J=PI; //再进行宏替换,又一次分配内存!   const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干份拷贝。 (5) 提高了效率。   编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

    01
    领券