为什么将函数参数标记为易失性

2023-12-31

我目前正在阅读PostgreSQL https://github.com/postgres/postgres代码。以下是缓冲区管理器的摘录:

static void WaitIO(volatile BufferDesc *buf);
static bool StartBufferIO(volatile BufferDesc *buf, bool forInput);
static void TerminateBufferIO(volatile BufferDesc *buf, bool clear_dirty,

我知道 volatile 关键字通常用于设备驱动程序和嵌入式系统中。有关键字的解释。

当在类型定义中使用关键字 volatile 时,它​​向编译器指示应如何处理变量。主要是告诉编译器,由于程序或当前执行行外部的操作,变量的值可能随时发生变化。 (Source https://web.archive.org/web/20140329054504/http://www.cognitus.net:80/html/tutorial/usingVolatile.html)

那么为什么某些函数参数被声明为易失性呢?我不希望 DMA 改变指针位置。那么这里会发生什么呢?


volatile BufferDesc *buf意味着数据buf 指着是易失性的,而不是包含的指针buf是不稳定的。 (那将是BufferDesc * volatile buf.)

From 您链接到的页面 https://web.archive.org/web/20140329054504/http://www.cognitus.net:80/html/tutorial/usingVolatile.html:

另一方面,如果你有一个指针变量,其地址本身是易失性的,但指向的内存不是易失性的,那么我们有:

int * volatile x;

关于你问题的这一部分:

那么为什么某些函数参数被声明为易失性呢?

大概是因为它指向的数据可能会以编译器不一定知道的方式发生变化。这volatile关键字的作用是防止编译器应用假设数据不会以它不知道的方式更改的优化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么将函数参数标记为易失性 的相关文章

  • 使用链表进行堆排序

    我想知道是否有人曾经使用链表进行堆排序 如果他们可以提供代码 我已经能够使用数组进行堆排序 但尝试在链表中进行排序似乎不切实际 而且在你知道的地方很痛苦 我必须为我正在做的项目实现链接列表 任何帮助将不胜感激 我也用C 答案是 你不想在链表
  • C#.Net 邮件将进入垃圾邮件文件夹

    我正在从 ASP net Web 应用程序发送电子邮件 邮件发送成功 没有失败 但大多数都进入了垃圾邮件文件夹 请帮助我克服垃圾邮件过滤器 我的发送邮件代码 public void SendMail string FromAddress s
  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • 如何在多线程应用程序中安全地填充数据并 Refresh() DataGridView?

    我的应用程序有一个 DataGridView 对象和一个 MousePos 类型的列表 MousePos 是一个自定义类 它保存鼠标 X Y 坐标 类型为 Point 和该位置的运行计数 我有一个线程 System Timers Timer
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • 构建 C# MVC 5 站点时项目之间的处理器架构不匹配

    我收到的错误如下 2017 年 4 月 20 日构建 13 23 38 C Windows Microsoft NET Framework v4 0 30319 Microsoft Common targets 1605 5 警告 MSB3
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 在 C# 的 WebAPI 中的 ApiController 上使用“传输编码:分块”提供数据

    我需要服务分块传输使用编码数据API控制器 因为我无权访问HttpContext or the Http请求 我有点不知道在哪里写入响应以及在哪里刷新它 设置如下 public class MyController ApiControlle
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • 如果将变量设置为等于新对象,旧对象会发生什么?

    假设我们有一个 X 类not有一个超载的operator 功能 class X int n X n 0 X int n n n int main X a 1 an object gets constructed here more code
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配
  • 如何在 ASP.NET Core 中注入泛型的依赖关系

    我有以下存储库类 public class TestRepository Repository

随机推荐

  • ggplot:同时通过“geom_rect”排列因子顺序并突出显示区域

    首先 指定分类变量顺序的方法ggplot是重新排序它的级别data frame 其次 要在我们可以使用的任何绘图上突出显示一个区域geom rect 这里需要注意的是 不要将数据传递给geom rect 否则它不允许我们设置alpha 因此
  • 在 Haskell 中操作元组

    我是 Haskell 的新手 我有一个关于元组的问题 难道就没有遍历元组的方法吗 我知道使用列表进行遍历非常容易 但是如果输入作为元组给出 是否没有办法像使用列表一样检查整个元组 如果不是这种情况 是否可以将元组中的值提取到列表中并以这种方
  • 全屏纹理 iPhone OpenGL ES

    我知道 iPhone 上的 OpenGL 纹理需要是 2 的幂 OpenGL 2 0 也是如此吗 如果我有一个尺寸为 320 x 480 的图像并且想要将其全屏绘制 是否有任何可能的方法可以使用 OpenGL 来完成此操作 Thanks N
  • 如何使用 async/await 在 Node.js 中异步创建ReadStream

    我在使用时遇到困难fs creadReadStream异步处理我的 csv 文件 async function processData row perform some asynchronous function await someAsy
  • 二分查找条件中何时使用“=”?

    我对何时使用的场景感到很困惑 在二分查找中 例如 这是我从 wiki 中找到的 其中使用 while imin lt imax int binary search int A int key int imin int imax contin
  • ios 设置包中的简单标题输出

    我只想在设置文件中输出我的 ios 应用程序的版本号 我知道我必须将设置文件添加到应用程序文件夹中 当我构建并运行时 我可以看到标准设置包附带的 4 个设置 为了获得一个简单的只读字符串 我将第二个值更改为以下 在代码 didFinishL
  • 检查一个列表是否包含另一个列表中的元素

    我有两个列表 其中包含不同的对象 List
  • 如何使用具有不同对象的“repeating:count:”来初始化数组? [复制]

    这个问题在这里已经有答案了 令人惊讶的是 下面的代码打印SAME而初始化程序应该调用Z 每次构造函数 如何使用此方法与不同的实例初始化数组Z import Foundation class Z var i Int 0 var z Z Z r
  • 英特尔 XDK:将您的移动应用连接到数据库

    我目前正在开发一个应用程序 如果我没有数据库 构建后的应用程序将会很重 如何将应用程序连接到本地或远程数据库 提前致谢 您可以使用以下方法之一来使用数据库 1 使用 HTML5 客户端数据库 HTML5 在本地客户端计算机上提供四种不同类型
  • 如何在交互式会话中重置下划线? [复制]

    这个问题在这里已经有答案了 我已经覆盖了下划线变量 在Python交互式解释器中 如何在不重新启动解释器的情况下使下划线再次工作 del 一个全球性的 shadows https en wikipedia org wiki Variable
  • 如何在 PHP 中使用 SerializeArray 值?

    我从表单中获得了调整大小 resize resize form serializeArray 我把调整大小放在隐藏中并将其发送到php页面 如何在php中获取调整大小值
  • React-Bootstrap / React-Router-Bootstrap 中导航栏品牌的最佳实践

    存在关于锚标记的问题反应引导 and 反应路由器 我很好奇其他人是如何处理这种情况的 可以只留下带有 href 的锚标记 例如 a href Site Title a 并避免使用IndexLinkContainer 还有使用MenuItem
  • 将错误消息设置为英语不起作用

    由于某种原因 我无法更改 PostgreSQL 错误消息的语言 我尝试在脚本内设置语言以在第一行创建架构 SET lc messages TO en US UTF 8 我也做了this https stackoverflow com que
  • 序列化修改记录时,belongsTo 承诺未解决

    好的 必填信息 DEBUG DEBUG Ember 1 3 1 DEBUG Ember Data 1 0 0 beta 7 f87cba88 DEBUG Handlebars 1 0 0 DEBUG jQuery 1 10 2 DEBUG
  • SSH.NET SFTP 递归获取目录和文件列表

    我正在使用 Renci SshNet 库通过 SFTP 递归获取文件和目录列表 我可以连接 SFTP 站点 但我不确定如何在 C 中递归获取目录和文件列表 我还没有找到任何有用的例子 有人尝试过这个吗 如果是这样 您可以发布一些有关如何递归
  • 将 stdout 和 stderr 重定向到 syslog

    在一个程序中 我希望将所有 printfs 写入系统日志 我将所有 printf 替换为 syslog 因此我想到将 stdout 和 stderr 重定向到 syslog 为此我尝试了以下代码 int main FILE fl fl po
  • Jquery - 使用两者时区分同一输入上的“点击”和“焦点”

    如果单击输入 我试图在输入上触发事件or如果输入成为焦点 我遇到的问题是阻止事件在单击时触发两次 因为显然 单击输入也会使其成为焦点 我在 jfiddle 上放了一个非常宽松的版本来向您展示我的意思 代码如下 HTML
  • 如何有效计算缩放比例?

    我有一个包含在框中的可拖动图像 您可以放大和缩小框中的图像 这将使图像变大或变小 但框大小保持不变 该框的高度和宽度将随着浏览器大小的调整而变化 图像的顶部和左侧值将在拖动时发生变化 我试图将框在图像中居中的任何点保留在中心 有点像 Goo
  • Windows 中公钥和私钥容器的位置?

    我尝试使用以下代码将我的公钥和私钥存储在容器中 CspParameters cp new CspParameters cp KeyContainerName Test RSACryptoServiceProvider rsa new RSA
  • 为什么将函数参数标记为易失性

    我目前正在阅读PostgreSQL https github com postgres postgres代码 以下是缓冲区管理器的摘录 static void WaitIO volatile BufferDesc buf static bo