gpt4 book ai didi

c++ - 延迟缓冲区的概念是否在 ODBC 之外的任何地方使用?

转载 作者:搜寻专家 更新时间:2023-10-30 23:57:49 24 4
gpt4 key购买 nike

在 ODBC 中,Deferred Buffers是一个概念,在函数调用中指定值后的某个时间使用该值。

作为我研究的一部分,我试图弄清楚,是否目前正在使用任何其他应用程序在 ODBC 之外使用延迟缓冲区?

在这方面,我想从社区了解他们是否在其他领域遇到过类似的事情。

最佳答案

是ODBC非常具体的实现细节。从石器时代开始,在 1990 年代初期,像 Windows 3.x 这样的 16 位操作系统很普遍。这非常重视内存使用,避免存储重复非常重要。

因此,ODBC 中的常见模式是应用程序为表数据和查询分配所需的存储空间。您正在谈论的那些“延迟缓冲区”。 SQLBindCol() 允许 ODBC 驱动程序稍后将检索到的数据直接插入应用程序分配的存储空间。 SQLBindParameter() 对从应用程序流向数据库的数据执行相反的操作。

这是一个脆弱的方案,当应用过早释放缓冲区时,显然会发生非常糟糕的事情。这就是现代 32 位和 64 位数据提供商不再这样做的原因。它们自己分配缓冲区,应用程序从它们复制数据/向它们复制数据。

作为适用于其他用法的“概念”,它没有什么特别之处。许多 api 函数以这种方式工作,您将指针传递给缓冲区,然后 api 函数将数据复制到您传递的缓冲区或从中复制数据。 ODBC 唯一有点特别的是缓冲区可以在单个 api 函数调用之后继续使用。通常最好用“句柄”概念来处理。换句话说,有一个 api 函数分配并返回一个不透明的数字来标识资源。该应用程序然后调用其他 api 函数并将句柄传回。还有一个专门的功能可以再次释放 handle 。这样可以减少事故,但 handle 泄漏的风险除外。

关于c++ - 延迟缓冲区的概念是否在 ODBC 之外的任何地方使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23216766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com