当前位置:   article > 正文

每日面经(四)_malloc最大能申请多大的空间

malloc最大能申请多大的空间

1.malloc最多能申请多少内存

地址空间限制是有的,但是malloc通常情况下申请到的空间达不到地址空间上限。内存碎片会影响到你“一次”申请到的最大内存空间。比如你有10M空间,申请两次2M,一次1M,一次5M没有问题。但如果你申请两次2M,一次4M,一次1M,释放4M,那么剩下的空间虽然够5M,但是由于已经不是连续的内存区域,malloc也会失败。系统也会限制你的程序使用malloc申请到的最大内存。Windows下32位程序如果单纯看地址空间能有4G左右的内存可用,不过实际上系统会把其中2G的地址留给内核使用,所以你的程序最大能用2G的内存。除去其他开销,你能用malloc申请到的内存只有1.9G左右。

2.描述一下上下文切换

在操作系统中,上下文(Context)指的是程序运行时的环境信息,包括程序的 CPU 寄存器的内容、程序运行的堆栈,以及其他必要的状态。当操作系统需要在多个任务之间进行切换时,则需要保存一个任务的上下文信息,用于恢复任务的状态。这个过程就是上下文切换(Context Switching)。

在操作系统中,上下文切换是非常常见的一个操作,它可以通过改变 CPU 的运行环境来实现多任务或者多进程的交替运行。当一个进程或者线程需要等待某些条件达成时,操作系统就会将这个进程或线程的上下文信息保存下来,并切换到另一个进程或者线程运行。当条件达成后,操作系统再将之前保存的上下文信息恢复,让这个进程或线程继续运行。

上下文切换的开销非常大,因为需要保存和恢复大量的状态信息,包括 CPU 寄存器、进程或线程的堆栈、程序计数器、程序状态字等。此外,上下文切换还需要执行复杂的内核操作,包括切换虚拟地址空间、更新页表等。因此,如果上下文切换发生的频率过高,会导致系统性能下降。

在操作系统中,上下文(Context)指的是程序运行时的环境信息,包括程序的 CPU 寄存器的内容、程序运行的堆栈,以及其他必要的状态。当操作系统需要在多个任务之间进行切换时,则需要保存一个任务的上下文信息,用于恢复任务的状态。这个过程就是上下文切换(Context Switching)。

在操作系统中,上下文切换是非常常见的一个操作,它可以通过改变 CPU 的运行环境来实现多任务或者多进程的交替运行。当一个进程或者线程需要等待某些条件达成时,操作系统就会将这个进程或线程的上下文信息保存下来,并切换到另一个进程或者线程运行。当条件达成后,操作系统再将之前保存的上下文信息恢复,让这个进程或线程继续运行。

上下文切换的开销非常大,因为需要保存和恢复大量的状态信息,包括 CPU 寄存器、进程或线程的堆栈、程序计数器、程序状态字等。此外,上下文切换还需要执行复杂的内核操作,包括切换虚拟地址空间、更新页表等。因此,如果上下文切换发生的频率过高,会导致系统性能下降。

在操作系统中,上下文(Context)指的是程序运行时的环境信息,包括程序的 CPU 寄存器的内容、程序运行的堆栈,以及其他必要的状态。当操作系统需要在多个任务之间进行切换时,则需要保存一个任务的上下文信息,用于恢复任务的状态。这个过程就是上下文切换(Context Switching)。

在操作系统中,上下文切换是非常常见的一个操作,它可以通过改变 CPU 的运行环境来实现多任务或者多进程的交替运行。当一个进程或者线程需要等待某些条件达成时,操作系统就会将这个进程或线程的上下文信息保存下来,并切换到另一个进程或者线程运行。当条件达成后,操作系统再将之前保存的上下文信息恢复,让这个进程或线程继续运行。

上下文切换的开销非常大,因为需要保存和恢复大量的状态信息,包括 CPU 寄存器、进程或线程的堆栈、程序计数器、程序状态字等。此外,上下文切换还需要执行复杂的内核操作,包括切换虚拟地址空间、更新页表等。因此,如果上下文切换发生的频率过高,会导致系统性能下降。

3.互斥锁与自旋锁的优缺点?原理?应用场景

互斥锁

互斥锁是一种非常常用的锁机制,也称作互斥量。它是通过操作系统等核心层面提供的互斥保护来实现线程同步的。互斥锁的原理是,在代码临界区(Critical Section)使用锁来保证同一时间只有一个线程访问临界区。当一个线程进入临界区时,操作系统会给它分配一个互斥锁,其他线程想要访问临界区时则需要先尝试获取互斥锁,如果获取不到则需要进入睡眠等待状态。当临界区访问完成后,线程会释放互斥锁,使得其他线程可以继续访问临界区。

优点

  • 可以有效避免竞态条件(Race Condition)和死锁等问题。
  • 由于利用了操作系统等核心层面提供的互斥保护,可以保证线程安全性。

缺点

  • 互斥锁实现需要操作系统等核心层面提供支持,因此会涉及到内核态和用户态的频繁切换,开销较大。
  • 由于互斥锁是内核实现的,因此需要访问内核资源,而这种操作是相对耗费时间的,因此在高并发场景下性能可能不太理想。
  • 在多个进程中使用互斥锁时,需要使用进程间通信的方式来传递锁,增加了额外的开销和复杂度。

应用场景

  • 对于需要保证线程安全的场景,互斥锁是必不可少的锁机制。
  • 在应用程序中,如果需要竞争某个共享资源,互斥锁同样也是一种非常不错的选择。

自旋锁

自旋锁是另外一种常用的锁机制,它是由多个线程通过不断查询锁状态来进行同步,而不是像互斥锁那样将线程挂起。当一个线程尝试获取自旋锁失败时,它会进入自旋等待(Spin Waiting)状态,即不停查询锁的状态直到获取到锁为止。

自旋锁的原理是,一个线程在访问共享资源之前,先尝试获取自旋锁。如果自旋锁已经被占用,则线程等待一段时间,然后再次尝试获取锁。如果在一定的时间内获取到了锁,则线程可以访问共享资源;否则线程会继续等待。当线程访问完成后,会释放自旋锁,以便其他等待线程可以获取锁。当然,自旋锁也可以在尝试若干次后主动放弃 CPU 进入睡眠状态,以避免出现长时间自旋的情况。

优点

  • 没有进程切换的开销,因此性能相对互斥锁会更好。
  • 自旋锁可以使用在多个进程空间中,因为它不需要使用内核资源。

缺点

  • 如果等待锁的时间过长,则会消耗大量 CPU 资源,导致系统性能下降。
  • 自旋锁被多个线程同时获取时,只能有一个线程获得锁,其他线程都需要等待,因此不适用于互斥锁的应用场景。

应用场景

  • 自旋锁通常适用于锁使用频率非常高且锁持有时间短的场景,例如操作系统内核中的中断处理程序,在其中使用自旋锁效果比较好。

4.视频直播用什么协议为什么

视频直播使用的主要协议有RTMP,HLS和DASH等。

  1. RTMP协议通常被用于低延迟直播。它基于TCP传输,通过流媒体服务器将视频内容推送到客户端。RTMP在传输过程中可以做到数据压缩和优化,因此可以控制延迟。

  2. HLS协议是苹果提出的一种基于HTTP的流媒体传输协议,主要用于苹果设备和浏览器的直播和点播视频。服务器将音视频流转换成HTTP的标准格式,客户端通过HTTP请求来获取流片段数据。HLS技术延迟较高,不能满足实时直播需求。

  3. DASH协议是一种开放标准的流媒体协议,支持多种编码和格式,可以在不同设备和平台间实现无缝转换。DASH相比于HLS来说更强大、更灵活,它可以根据设备性能和网络情况自适应调整视频质量和码率,以提供更佳的用户体验。

总体来说,RTMP协议具有低延迟、多平台支持优势,适用于实时直播等场景;HLS协议则支持多设备、稳定性强,适用于点播和网络环境较差的场景;DASH协议则兼具两种协议的优点,可以自适应调整码率和画质,并提供更好的用户体验。

5.https加密过程

HTTPS(Hypertext Transfer Protocol Secure)是HTTP协议上的安全传输协议,通常使用SSL/TLS协议对HTTP协议进行加密传输。下面是HTTPS加密的过程:

  1. 客户端发起HTTPS请求。客户端通过TCP/IP协议与服务器建立连接,发送连接请求,并且请求协商安全传输协议。

  2. 服务器回应安全传输协议和证书。如果服务器支持HTTPS协议,它将通过SSL/TLS协议发送数字证书,该数字证书包含了服务器的公钥和证书颁发机构的信息。

  3. 客户端验证数字证书。客户端通过证书颁发机构验证数字证书的真实性,确保SSL/TLS协议管理的公钥是来自于服务器端的。如果证书有效,客户端使用证书中的公钥加密一个“随机数”,并将其发送给服务器。

  4. 服务器解密客户端发送的信息。服务器使用私钥解密客户端发送的“随机数”。

  5. 服务器与客户端使用“随机数”生成对话密钥。服务器通过使用客户端发送的“随机数”和服务器生成的“随机数”生成对话密钥,该对话密钥用于对接受和发送的数据进行加密和解密操作。

  6. 数据加密传输。一旦密钥被生成,客户端和服务器可以使用对话密钥对数据进行加密和解密,保证数据的安全传输。

总结来说,HTTPS加密过程包括数字证书认证、公钥加密和私钥解密、对话密钥生成、数据加密传输等几个步骤。虽然HTTPS协议传输过程要比HTTP协议复杂,但是它能够保证数据传输的安全性,防止敏感信息被窃取和篡改。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/333349
推荐阅读
  

闽ICP备14008679号