内存拷贝 和 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性能。