C语言内存精讲,让你彻底明白C语言的运行机制!

C语言内存专题讲解当你决定学习「内存」,你已然超越了 99% 的程序员!

程序是在内存中运行的,一名合格的程序员必须了解内存,学习C语言是了解内存布局的最简单、最直接、最有效的途径,C语言简直是为内存而生的,它比任何一门编程语言都贴近内存。

本专题将为你解开以下谜团:

  • C语言中使用的地址为什么是假的,计算机又是如何通过假的地址访问到真实的物理内存的?
  • 一个C语言程序在内存中是如何分布的?函数放在哪里?变量放在哪里?字符串放在哪里?
  • 为什么全局变量在整个程序中都可以使用,而局部变量只能在函数内部使用?
  • 一个C语言程序可以使用多大的内存?
  • 操作系统和用户程序之间是如何协作的?
  • 堆和栈都是什么,它们在程序运行过程中起到什么作用?为什么栈内存的分配效率要高于堆?
  • 栈溢出是怎么回事,如何利用栈溢出进行攻击?
  • 内存泄漏、野指针、非法内存访问、段错误都是怎么产生的?
  • 内存池、线程池、连接池等这些莫名其妙的“池子”是怎么回事?
本章内容:
1. 一个程序在计算机中到底是如何运行的?
2. 虚拟内存到底是什么?为什么我们在C语言中看到的地址是假的?
3. 虚拟地址空间以及编译模式
4. C语言内存对齐,提高寻址效率
5. 内存分页机制,完成虚拟地址的映射
6. 分页机制究竟是如何实现的?
7. MMU部件以及对内存权限的控制
8. Linux下C语言程序的内存布局(内存模型)
9. Windows下C语言程序的内存布局(内存模型)
10. 用户模式和内核模式
11. 栈(Stack)是什么?栈溢出又是怎么回事?
12. 一个函数在栈上到底是怎样的?
13. 函数调用惯例(Calling Convention)
14. 用一个实例来深入剖析函数进栈出栈的过程
15. 栈溢出攻击的原理是什么?
16. C语言动态内存分配
17. malloc函数背后的实现原理——内存池
18. C语言野指针以及非法内存操作
19. C语言内存泄露(内存丢失)
20. C语言变量的存储类别和生存期