如何摆脱内存在QIoDevice

How to get rid of memcpy in QIoDevice

本文关键字:QIoDevice 存在 内存 何摆脱      更新时间:2023-10-16

我使用Qt做一些音频输出。有一个示例audiououtput,其中纯虚拟函数qint64 QIODevice::readData (char * data, qint64 maxSize)是这样重新实现的(这不是示例中的实际代码)。

qint64 Generator::readData(char *data, qint64 len)
{
    memcpy(data, m_buffer.data(), len);
    return len;
}
所以,我们得到指向数据的指针,从缓冲区复制内存到这个数据。我想知道我是否可以把指针数据分配给新的位置,像这样:
qint64 Generator::readData(char *data, qint64 len)
{
    data = m_buffer.data();
    return len;
}

因为内存慢,所以我可以吗?谢谢你!

好的,只是不接收评论"什么是慢":第一内存比指针赋值慢第二,是的,我在声音播放中有延迟,我想让程序在每个点上都是最优的。

注:我在试着做,但我没有声音,所以也许答案是否定的。那么为什么呢?

这个方法的签名只允许您通过复制来返回数据。给指针赋值是没有意义的,因为这个参数是作为副本传递的,所以赋值的值在方法外部是不可见的。

memcpy对于实时音频输出一点也不慢(除非你在8位处理器上做)。

太慢的音频代码会导致声音的间隙,但不会导致延迟。延迟是由于音频缓冲区太大。