目录

问题集

目录
  1. 进程间通信方式有哪些?
  2. Socket 通信如何处理并发通信的情况?它的底层结构是怎么样的?
  1. 内存分配中的栈内存、堆内存分别存储什么?TCmalloc 和 Jemalloc 中的内存是申请一大块内存,然后切割成小内存,然后有一块内存用于记录其他内存空间。跟这个是否有关系?
    栈内存分配给定长的数据,例如指针。
    堆内存分配给不定长的对象。
  2. 由于进程隔离,进程会得到一个 4GB 的虚拟地址空间。这是根据 32 位处理器的寻址能力确定的。那么如果是 64 位处理器,这个虚拟地址空间还是 4GB 么?
  3. 内核空间和用户空间分别指什么?
    针对 Linux 操作系统,将最高的1G字节(从虚拟地址 0xC0000000 到 0xFFFFFFFF )供内核使用,称为内核空间,而较低的 3G 字节(从虚拟地址 0x00000000 到0xBFFFFFFF),供各个进程使用,称为用户空间。每个进程都可以通过系统调用进入到内核。其中在 Linux 系统中,进程的用户空间是独立的,而内核空间是共有的,进程切换时,用户空间切换,内核空间不变。—— https://www.cnblogs.com/huansky/p/13170125.html
  4. fork之后,子进程从父进程那继承了什么?
    子进程会获得其父进程所有文件描述符的副本,这些文件描述符在执行 fork 时打开。
  5. 文件描述符是啥?有什么相关的数据结构?
    文件描述符,在 Windows 中被称为文件句柄,是一个整数。它是系统内核打开文件后给出的一个数字索引。内核会在每个进程空间中维护一个文件描述符表。这张表记录着文件描述符和文件的结构体的对应关系。

    https://www.cnblogs.com/xiangtingshen/p/11961434.html

  6. C 语言的 fopen 为什么返回的是 FILE 指针?为什么操作的都是指针?
    opaque 类型,隐藏结构体内部实现。
    https://blog.csdn.net/xgbing/article/details/2775426