内存拷贝 和 io 操作哪个更耗性能

发布网友 发布时间:2022-04-23 00:12

我来回答

2个回答

热心网友 时间:2023-07-04 11:53

  是需要消耗时间的。
  内存分配时,需要向系统进行申请,系统会对剩余连续内存做查询,查找到合适的内存块后,再对该块写一个已被使用的标识位。然后再把分配到的内存地址返回。
  内存删除的时候,是分配的一个反向过程,想系统申请,清除被使用标记为,系统将内存回收,返回。
  这个时间非常短,短到只有几十或几百微妙,但一定是有时间消耗的。
  在C++中,内存分配有两种途径,通过new/delete和通过malloc/free。
  其中new/delete要比malloc/free更高效。因为new和delete是C++的运算符,而malloc/free是C++的函数。前者的调用省去了函数调用相关操作。
  所以在C++编程中,要尽量使用new/delete来进行动态内存的分配/删除操作。

热心网友 时间:2023-07-04 11:54

假设我们有N块数据需要发送出去,下面分别描述2个方法:

方法1,将N数据合并到一个大缓存,再向系统发起IO请求--减少了系统调用次数,但是内存拷贝次数多;
方法2,将N块数据逐一提交给操作系统--减少了内存拷贝次数,但是系统调用次数多;

结论:如何对比这2种方法的优劣呢?取决于你的数据块平均字节数。
如果数据的平均长度很小,建议合并后一次发起IO请求,因为拷贝比系统调用更快;
如果数据的平均长度较大,建议分批次发起IO请求,因为系统调用比拷贝更快;
这个最优化长度,须根据硬件条件、系统类型来确定,即根据实测数据评判。
另外,linux下有read_v和write_v等IO不连续数据块的系统函数,借助它们可能一定程度优化系统IO性能。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com