zoukankan      html  css  js  c++  java
  • 《Glibc内存管理》笔记DAY1

    x86_64栈和mmap固定映射地址

      只需要设置全局变量randomize_va_space 值 为 0 , 这 个 变 量 默 认 值 为 1 。 用 户 可 以 通 过 设 置/proc/sys/kernel/randomize_va_space 来停用该特性,也可以用如下命令:

    sudo sysctl -w kernel.randomize_va_space=0

    内存的延迟分配

      只有在真正访问一个地址的时候才建立这个地址的物理映射,这是 Linux 内存管理的基本思想之一。Linux 内核在用户申请内存的时候,只是给它分配了一个线性区(也就是虚拟内存),并没有分配实际物理内存;只有当用户使用这块内存的时候,内核才会分配具体的物理页面给用户,这时候才占用宝贵的物理内存。内核释放物理页面是通过释放线性区,找到其所对应的物理页面,将其全部释放的过程。

    内核数据结构 mm_struct

    • start_code:进程代码段的起始地址
    • end_code:进程代码段的终止地址
    • start_stack:进程堆栈段起始地址
    • start_brk:进程动态内存分配起始地址(堆的起始地址)
    • brk:是动态内存分配当前的终止地址(堆的当前最后地址)

    Heap 操作相关函数

    #include <unistd.h>

    • 系统调用int brk(void *addr);
    • C库函数void *sbrk(intptr_t increment);

    Mmap 映射区域操作相关函数

    #include <sys/mman.h>

    • void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
        mmap()函数将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。
    • int munmap(void *addr, size_t length);
        munmap 执行相反的操作,删除特定地址区域的对象映射。

    内容来源

    庄明强老师的《Glibc内存管理》

  • 相关阅读:
    作业
    第四次作业
    第三次作业
    作业
    第4次作业
    第3次作业,c语言
    第二次作业
    黄义方 作业4
    课堂作业
    第三次作业
  • 原文地址:https://www.cnblogs.com/luoleqi/p/11964408.html
Copyright © 2011-2022 走看看