实现可以将提示视为实际语句吗?

2023-12-08

在C中,register存储限定符是hint对于实现来说,应该尽可能快地访问此类标识符(例如,存储在 CPU 寄存器中)。

§6.7.1具有存储类说明符寄存器的对象的标识符声明表明对该对象的访问应尽可能快。这些建议的有效程度取决于实施情况。

and

§6.7.3限制限定符的预期用途(如寄存器存储 类)是为了促进优化[...]

但是,我听说过一些实现(特别是在嵌入式系统中),其中register有一个更强烈的含义:它是command编译器应将合格标识符放入寄存器中。

So, 是一个实现allowed遵循该行为并因此被视为符合标准?什么会允许这样做?

我提出这个问题是因为我发现有义务将该对象放入寄存器中不再是建议,正如标准所规定的那样;换句话说,它们是冲突的。


正如您所说,该标准说“此类建议的有效程度是由实施定义的”。

这给了实施者自由的范围,可以做任何事情,从忽略建议到竭尽全力去实施它。选择接受的实现register要求使用寄存器的说明符当然并不与标准相矛盾,而且无论说明符如何,只对寄存器放置做出自己的决定的实现也不矛盾。

实现不应该做的一件事是拒绝编译程序,因为它需要溢出register——至少,达到§5.2.4.1中规定的限制翻译限制-- 但没有什么可以阻止编译器发出警告。 (没有什么可以阻止编译器发出有关任何内容的警告;编译器通常会警告被认为是危险的完全合法的构造。)

Edit:重读 5.2.4.1,在我看来,一个实现实际上可能拒绝编译它认为有太多的程序register说明符,因为 Limits 子句仅将实现绑定为能够翻译和执行“一个程序”,其中包括(例如)“在一个块中声明了块作用域的 511 个标识符”,而不是任何执行此操作的程序。据我所知,编译器可以坚持认为达到该限制的“至少一个程序”没有任何register规格。

Note:并非所有 CPU 都具有一般意义上的寄存器,但该标准实际上并未提及任何有关硬件的内容。它只是说register说明符传达了程序员希望“尽可能快地访问对象”的愿望。此外,编译器尝试满足该愿望实际上并不需要优化对对象的访问;而是需要优化对对象的访问。尝试优化失败并不违反优化标准。

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

实现可以将提示视为实际语句吗? 的相关文章

  • 将反序列化方法转换为异步

    我正在尝试使用 Async Await 转换此将对象反序列化为字符串的方法 public static T DeserializeObject
  • 什么可能导致 sock send() 命令上的“资源暂时不可用”

    什么会导致Resource temporarily unavailable套接字上的错误send 命令 套接字设置为AF UNIX SOCK STREAM 它在大多数情况下都有效 但偶尔会出现此错误 套接字的接收端似乎工作正常 我知道这不是
  • 使用和重载基类的模板成员函数?

    下面 构造Y超载X的成员函数f 两个重载都是模板函数 但采用不同的参数 typename and int 明确指定 struct X template
  • boost::noncopyable 是如何工作的

    我在 C 实践中偶然发现了两个愚蠢的问题 据我所知 c 中的复制构造函数和赋值运算符不是继承的 那么 boost noncopyable 在这种情况下如何帮助禁止这些东西呢 class X private boost noncopyable
  • 使用 C# 将文件列表从 ftp 下载到本地文件夹? [复制]

    这个问题在这里已经有答案了 我希望将 ftp 中的所有文件下载到本地文件夹 下载到本地驱动器后 所有文件都应在 ftp 中删除 从下面的代码 我只能从 ftp 下载一个我不期望的文件 我需要将所有文件放在一个文件夹中 但不放在本地文件名的名
  • 如何向 Iron Python 添加模块?

    我一直在尝试使用 C Visual Studio 执行以下 Python 代码 graphcreater py 我通过 NuGet 包管理器添加了 IronPyton 2 7 7 和 IronPython StdLib 2 7 7 一旦我运
  • 创建一个从用户机密获取连接字符串的 DbContextFactory

    使用 DotNetCore 解决方案WebApi项目和一个单独的Data包含实体框架实现的项目 我们一直在升级库 因此我们使用所有最新的核心内容 In the Data项目 我们创建了一个ApplicationDbContextFactor
  • 不同平面中不同幅值的两条线段之间最近的两个 3D 点

    比方说AB1 AB2 CD1 CD2 AB1 AB2 and CD1 CD23D 点构成线段 所说的线段是不在同一平面 AP是一个点 线段AB1 AB2 BP是一个点 线段CD1 CD2 Point1 and Point2彼此最接近 两条线
  • 处理可选依赖项 (C#)

    我们有一个可以选择与 TFS 集成的应用程序 但是由于集成是可选的 所以我显然不希望所有机器都需要 TFS 程序集作为要求 我应该怎么办 我是否可以在主程序集中引用 TFS 库 并确保在使用 TFS 集成时仅引用 TFS 相关对象 或者 更
  • 在 UserControl C# .NET 中添加/停靠控件

    我正在编写一个 UserControl 它以编程方式添加子控件 目前我正在添加新的控件 如下所示 this Controls Add new Control Height 16 Dock DockStyle Top 我遇到的问题是新控件添加
  • 如何为 IAsyncOperation 指定回调方法

    是否可以指定一个方法完成后调用async手术 平台 C Windows Phone 8 我需要实现非阻塞方法来异步发送UDP数据包 他们有我的方法 onWriteComplete int errorCode 操作完成时回调 这是我尝试过的
  • Linux 相当于 GetCommandLine 和 CommandLineToArgv?

    我想知道是否有一些 API 可以在 Linux 上获取当前进程的命令行参数 我想我是非常不清楚的 该问题的真正目的是通过命令行参数传递 unicode 文件名 从文件中读取 proc self cmdline 例如 wallyk zf od
  • 来自“void *”的dynamic_cast

    根据this https stackoverflow com questions 3155277 cannot dynamic cast void to templated class void 没有 RTTI 信息 因此从void 不合法
  • 对双向链表进行排序 C++

    尝试通过遍历列表的循环来完成此操作 在循环中 我将头节点输入到我定义的排序函数中 然后使用 strcmp 来确定节点中的哪个名称是否应该排在前面 它不起作用 因为写得太早了 我通过一次沿着列表一个节点进行线性比较 而不是回去查看第一个节点是
  • 在 Linux 上用 C 跟踪键盘和鼠标事件

    如何在 Linux 中用 C 语言跟踪键盘或鼠标事件 Like for example if the user presses ESC Shift etc I should be able to track it Same way for
  • 使用二维动态数组编写一个类

    我有一个家庭作业 我并不是在寻找任何人为我做这项工作 我只是在一个小方面遇到了麻烦 尽管我也接受其他方面的建议 任务是 使用二维动态数组编写一个类 构造函数传入数组的维度 构造函数还将动态数组中的所有值初始化为行索引乘以列索引 交换二维数组
  • 传递给 WCF 服务的可选查询字符串参数

    我想知道如何使用 string limit WebOperationContext Current IncomingRequest UriTemplateMatch QueryParameters Limit 在我的wcf中这个方法 Cit
  • 如何使用 Dictionary 属性序列化对象?

    在下面的示例代码中 我得到了这个error 元素 TestSerializeDictionary123 Customer CustomProperties 呕吐型 System Collections Generic Dictionary
  • 着色器可以旋转形状以面向相机吗?

    我制作了一个球出现在 3D 空间中的场景 三角球耗费大量资源 所以我使用带有球纹理的二维表面 四边形 来完成此操作 但现在我需要在每次相机移动时调整形状的方向 我使用位置变换和 LookAt 方法来完成此操作 问题是我可以优化这个吗 如果可
  • Xamarin - iOS 地图上的多个多边形

    我目前正在关注this https developer xamarin com guides xamarin forms application fundamentals custom renderer map polygon map ov

随机推荐

  • Entity Framework Core 2.1 无法正确转换查询

    我有一个现有数据库 我从 2 个独立的项目访问该数据库 其中一个是 ASP NET MVC 5 项目 另一个使用每个项目中各自的实体框架版本运行 NET Core 2 1 我的问题是 我在 MVC 项目上使用的查询在 NET Core 项目
  • Linkedin OAuth2 授权码错误

    我正在尝试通过 Linkedin Auth2 从 Java Web 应用程序进行连接 在 linkedin 中添加了我自己的应用程序 生成授权URL 在新的弹出窗口中输入我的 linkedin 登录名 密码 在redirect uri上返回
  • 继承接口的Java重载方法

    我正在尝试了解java行为 使用此接口 public interface IA public interface IB extends IA public class myClass implements IB 我正在重载这样的方法 pub
  • 使用 JAXB 映射包含超类型和子类型的 Java 集合

    我正在尝试用 JAXB 制作这样的东西
  • 使函数在完成一些工作后返回自身

    let log x print int x log log 111 222 我期待着log打印111并返回自身然后打印222在第二次调用时 但它没有按预期工作 而是收到一条错误消息 为什么 如何让它按预期工作 我也尝试过rec无济于事 Fi
  • 超出 C# 中基本类型的数字

    我正在解决问题欧拉计划 大部分问题都解决了 超过 ulong 的大数字 Ex ulong number 81237146123746237846293567465365862854736263874623654728568263582 有效
  • 仍在努力处理大数据集

    我一直在这个网站上阅读 但未能找到确切的答案 如果它已经存在 我对重新发布表示歉意 我正在处理非常大的数据集 在具有 32 GB RAM 的计算机上有 6 亿行 64 列 我实际上只需要这些数据的更小的子集 但除了简单地使用 fread 导
  • 审计日志记录nhibernate

    您能否提供一些使用 NHibernate 进行审计日志记录的示例 ASP Net C 代码 而不是 java 代码 事件监听器比拦截器更适合审计信息 这是一个很好的例子 from 阿延德的博客
  • 强制某些代码始终在同一线程上运行

    我们有一个旧的第 3 方系统 我们称之为 Junksoft 95 我们通过 PowerShell 与之交互 它公开 COM 对象 我正在将其包装在 REST API ASP NET Framework 4 8 和 WebAPI 中2 我用S
  • 延迟断点:类何时加载

    我正在尝试使用以下命令调试 Maven jdb attach 8000 使用后mvnDebug 我尝试设置断点 但得到 main 1 stop in DeployMojo DeployMojo Deferring breakpoint De
  • 使用 JavaScript 进行图像缩放?

    有没有人有一些好的代码来使用 javascript 放大图像 我知道我可以调整它的大小等 但我很懒 正在寻找一些聪明的东西来缩放到不同的级别 缩放时四处移动等 检查一下 jQZoom Zoomimage jQuery 插件 jQuery I
  • Eclipse 如何将 .java 文件作为小程序运行?

    我一直在尝试运行一个从命令行创建的简单小程序 我尝试这样做 C java Applet 显然这不起作用 但是 我注意到 如果我选择该类并选择作为 java applet 运行 则 Eclipse 允许我运行该 applet Eclipse
  • 如何将文档内容动态加载到iframe中?

    我想做这样的东西 A B B页面在A页面里面 我想把所有的js css都插入到A页面中 我想把B页面分开 我设计它使用一个iFrame 动态获
  • 检查单词是否存在两次? (正则表达式)[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我对正则表达式很糟糕 我想要的是检查一个字符串是否有两次 http 一词 例如 http
  • modelica:计算随时间变化的连续变量的最小值/最大值

    如上所述 我希望计算连续变量随时间变化的最小值 和 或最大值 这是一个演示的最小示例 model MinMaxTest Real u Real u min start 10 Real u max start 10 equation u si
  • 用JS发送文件到PHP服务器

    我可以使用拖放将文件从浏览器发送到服务器 并且此代码工作正常 var temp new FormData temp append file content e originalEvent dataTransfer files 0 Ajax
  • Kotlin 术语“可变”是错误的吗?

    我的理解是 变量 一词指的是重新分配引用的能力 常量 意味着不能重新分配引用 Java中final和not的本质区别 var something new obj gt reference can be re assigned val som
  • 从嵌套 json 文件中删除 python dict 项

    我有一个 JSON 文件 当我尝试删除 python 字典中的项目时 我从返回 KeyError 0 的 API 中获取该文件 我认为这是我缺乏技能和 json 格式的结合 我的目标是删除所有实例192 168 1 1 from ip ad
  • Hbase 错误“错误:KeeperErrorCode = NoNode for /hbase/master”

    在 hbase shell 中执行任何命令时 我在 hbase shell 中收到以下错误 ERROR KeeperErrorCode NoNode for hbase master 启动HBASE HOSTCHND hbase 2 0 0
  • 实现可以将提示视为实际语句吗?

    在C中 register存储限定符是hint对于实现来说 应该尽可能快地访问此类标识符 例如 存储在 CPU 寄存器中 6 7 1具有存储类说明符寄存器的对象的标识符声明表明对该对象的访问应尽可能快 这些建议的有效程度取决于实施情况 and