当前位置:首页 > 内存 > 正文

内存的连续分配方式

  • 内存
  • 2024-06-12 04:59:25
  • 7853

一、内存的分配方式,进程和线程的区别,进程间内存分配方式有多少种?
1.从静态内存分配:此时的内存在程序编译时就已分配,并且存在于程序的整个执行期间。这里存放的是全局变量、静态变量等。
2.栈区的分配:相关代码执行时创建,执行完成后自动释放。局部变量存储在这里。堆栈内存分配操作内置于处理器的指令集中,效率很高,但容量有限。
3.堆区分配:动态分配内存。使用new/malloc时打开,使用delete/free时释放。持续时间由用户指定并且是灵活的。但存在内存泄漏等问题。
进程和线程的区别
线程是指进程内的执行单元,也是进程内的可调度实体。与进程的区别:
(1)调度:线程是调度和分配的基本单位,进程是资源拥有的基本单位。
(2)并发:不仅进程可以同时运行,同一进程的多个线程也可以同时运行。
(3)拥有资源:进程是拥有资源的独立单元。线程不拥有系统资源,但可以访问属于进程的资源。
(4)系统开销:在创建期间或。取消一个进程,由于系统必须分配和回收资源,所以系统开销明显大于创建或取消线程时的开销

1)管道:管道是半双工的通信方式,数据只能朝一个方向流动,只能在相关进程之间使用。进程亲和性通常指的是父子进程关系。
2)命名管道(FIFO):命名管道也是一种半双工通信方式,但可以在不相关的进程之间使用。命名管道是一种先进先出的通信方法。
3)信号量:信号量是一个计数器,可用于控制多个进程对共享资源的访问。它通常用作一种锁定机制,以防止当一个进程正在访问共享资源时其他进程访问该资源。因此,它主要用作进程之间以及同一进程内不同线程之间的同步手段。
4)消息队列:消息队列是消息的链表,存储在内核中,由消息队列标识符来标识。消息队列克服了信号传输信息量较小、管道只能承载原始字节流、缓冲区大小有限等缺点。
5)信号(sinal):信号是一种比较复杂的通信方式,用于通知接收进程有事件发生。
6)共享内存:共享内存由映射一段可供其他进程访问的内存组成。该共享内存由一个进程创建,但可供多个进程访问。共享内存是最快的IPC方法,专门为解决其他进程间通信方法的低效问题而设计。它经常与其他通信机制(例如信号量)结合使用,以实现进程之间的同步和通信。
7)Socket:Socket也是一种进程间通信机制,与其他通信机制不同,它可以用于不同机器之间的进程通信。


二、内存的分配方式有几种分配内存有三种方式:
[1]它们分配静态文件。内存是在编写程序时分配的,并且该内存在整个持续时间内都存在。例如:全局变量和静态变量。
[2]在堆栈上创建。执行函数时,可以在堆栈上创建函数内局部变量的存储单元,这些存储单元在函数终止时自动释放。处理器内置的堆内存分配操作非常高效,但分配的内存容量有限。
[3]从栈中扣除,也称为动态内存分配。当程序运行时,可以使用malloc或new来分配任意数量的内存。动态内存的生存期由程序员决定,使用灵活。然而,如果将空间分配到堆上,你负责回收该空间就会产生不同大小的堆碎片。