如何摆脱内存在QIoDevice
How to get rid of memcpy in QIoDevice
我使用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位处理器上做)。
太慢的音频代码会导致声音的间隙,但不会导致延迟。延迟是由于音频缓冲区太大。
相关文章:
- C++模板来检查友元函数的存在
- 既然存在危险,为什么项目要使用-I include开关
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- C++quit()函数中可能存在作用域问题
- C++擦除(如果存在)
- g++ 说函数不存在,即使包含正确的标头
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 有了gcc,是否可以链接库,但前提是它存在
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- C++Builder中的OnClick事件签名存在问题
- 如何正确地将分支添加到已存在的树中
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 如何检查QList中是否存在值
- 根据某个函数是否存在启用模板
- 如何将分支添加到已存在的TTree:ROOT
- 地图计数确实很重要,或者只是检查是否存在
- 通用C++/Python 多语言的存在
- 如何摆脱内存在QIoDevice