zoukankan      html  css  js  c++  java
  • [Linux] 第七章 数据管理 动态内存分配

    第七章 数据管理
     * 资源分配的管理方式
      * 如何对可能被多个用户同时访问的文件进行处理
      *1 动态内存管理 : 可以做什么以及Linux不允许做什么
      *2 文件锁 : 协调锁,共享文件的区域锁定和避免死锁
      
     *1 : UNIX以一种非常干净的方式管理内存,Linux程序不允许直接访问物理内存。
           Linux 提供了内存保护机制,它避免了不同应用程序之间的互相干扰。
           如有足够的交换空间,Linux允许应用程序访问比实际物理内存更大的内存空间。
           #include <stdlib.h>
           void *malloc(size_t size);
         简单的内存分配 --
    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        int ec = EXIT_FAILURE;
        char *p1 = malloc(1024);
        if(p1 != NULL) {
            printf("Hello Mem");
            ec = EXIT_SUCCESS;
        }
        return ec;
    }
    32位的指针可以寻址的地址空间可达 4G
     *2 : 应用程序所分配的内存是由Linux内核来管理的,程序请求内存或者是读写内存都是,
           需要由Linux内存来接管并决定如何处理这些请求。
          内核会在 物理内存 与 swap space 之间移动数据和程序代码,使得每次读写内存时,
          数据看起来总像是已经存在与物理内存一样!
          *专业术语* : Linux实现了一个 ”按需换页的虚拟内存系统“
          Linux将所有的内存以页的单位划分,4096B / P;
          Linux内核会对访问的内存地址进行检查,如果这个地址合法可用,内核就会确定需要向
          程序提供哪一个物理内存页面,然后,该页面之前从未被写入(分配)过,内核就直接分配它,
          如果它已经被保存在swap space 上,内核就读取包含数据的内存页面到物理内存(可能
          要把已有的页面从内存中移出到硬盘)。接着在完成虚拟内存地址到物理地址的映射之后,
          内核允许用户继续运行。

         @1, 访问空指针
                 char *p1 = (char *)0;
                 printf("Hello %s\n", p1);
                 sprintf(p1, "A write to null\n");
         @2, char z = *(const char *)0; Linux不允许直接从 零地址 处读取数据。
         Linux将程序员使用的内存块作为一个物理页面集来管理,如果一个内存页面未被使用
         ,Linux内存管理器就可以将其从物理内存置换到交换空间中(术语:换页)从而减轻它对资源
         使用的影响。如果程序试图访问位于已置换到交换空间的内存页中的数据,那么Linux会短暂
         的停止程序,将内存页从交换空间再次置换到物理内存,然后允许程序继续运行,就像数据 
         一直存在与内存中一样!  ”明白了!!!哈哈!1!“
        请记住 : 一旦调用free释放了一块内存,它就不再属于这个进程。它将由malloc函数库负责管理。
         @3,其他的内存分配函数
                ---1,void *calloc(size_t number_of_elements, size_t element_size)
                ---2, void *realloc(void *existing_memory, size_t new_size)
  • 相关阅读:
    为什么要配置PATH环境变量?如何配置
    JDK,JRE,JVM三者之间的关系,以及JDK、JRE包含的主要结构有哪些
    常用的开发工具
    API文档说明
    Java注释(Comment)
    EditPlus和notepad++配置
    Java第一个程序--HelloWorld
    cmd命令和快捷键
    如何以计算机的方式去思考
    藤野先生后来怎么样了?被自卑隔阂的友谊
  • 原文地址:https://www.cnblogs.com/robbychan/p/3787043.html
Copyright © 2011-2022 走看看