即使指针从未被取消引用,过数三指针中的硬件陷阱是如何发生的?

2023-11-27

In his 2005 年 11 月 1 日 C++ 专栏,赫伯·萨特写道……

int A[17];
int* endA = A + 17;
for( int* ptr = A; ptr < endA; ptr += 5 )
{
  // ...
}

[O]在某些 CPU 架构中,包括 当前的,上述代码 可能会导致硬件陷阱发生在 过了三点的点 指针被创建,无论是 指针是否曾经被解除引用。

CPU 如何捕获位模式?关于什么 ...

int A[17];

// (i) hardware will trap this ?
int *pUgly = A + 18; 

// (ii) hardware will trap this, too?
int *pEnd = A + 17;
++pEnd;  

// (iii) will this fool it?
int *precious = A + 17;
unsigned long tricksy = reinterpret_cast<unsigned long>(precious) ; 
++tricksy;
int *pHobbits = reinterpret_cast<int *>(tricksy); 

附加问题:“某些当前的 CPU 架构”一词通常是否应该被理解为仅指正在发行的产品,或者如果描述或暗示这些架构的小说作品具有最近的出版日期,那么它是否也包括虚构的架构?


指针操作依赖于实现。

可能会发生这样的情况:在某些平台上,仅允许特定寄存器存储指针值(仅特定寄存器可以用作索引寄存器),并且立即检查由非特权程序代码写入此类寄存器的值是否为有效地址。在这种情况下,如果指针值对应的地址不存在于程序的地址空间中,则肯定会发生硬件陷阱。

如果是这种情况,任何未经过编译器优化而将新值分配给指针的代码都可能导致陷阱。

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

即使指针从未被取消引用,过数三指针中的硬件陷阱是如何发生的? 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现

随机推荐

  • 如何在 jQuery 中使用 css font-weight 属性对文本进行动画处理?正常到粗体

    我正在尝试像不透明效果一样的动画 它会慢慢地将文本变粗 平常试过animate 方法但没有成功 搜索过但找不到任何示例 是否有可能做到这一点 js小提琴 jQuery var Text h1 Text click function Text
  • React Leaflet V3 自定义控件

    有一个新的 React leaflet 版本即将推出 可以在这里找到 npm 安装react leaflet next 文档 https react leaflet v3 now sh docs start introduction 这是使
  • 如何在 Java 应用程序日历中设置一周的第一天

    我们使用一个java应用程序 它有一个日期选择字段 当您单击那里时 会打开一个小日历 那里一周的第一天是星期日 但我希望是星期一 我尝试从 Windows 控制面板的日期设置中更改它 例如 我将 Windows 日历的第一天设置为星期四 但
  • 将 BigInteger 存储到 Mysql 中

    由于数学限制 我必须使用 BigInteger 类来表示值 经过一些计算后 我想将结果 由 2x BigInteger 实例给出 存储到 Mysql 中 存储此类对象的最佳数据类型是什么 我正在考虑使用 Blob 来存储这些结果的二进制格式
  • 如何调试 React Native?

    当应用程序在应用程序模拟器中运行时 如何使用 React Native 调试其 React 代码 Mac Cmd M Windows and Linux Ctrl M 在模拟器中使用上面适当的热键 它将弹出 Chrome 您可以从那里使用开
  • erlang 记录进程何时启动吗?

    我正在监视 Erlang 应用程序 目前正在尝试确定特定 PID 运行了多长时间 绝对时间戳或持续时间对我有用 但我在 process info 中或通过 sys 模块看不到这些数据位 有没有办法从 Erlang VM 中获取这些信息 我可
  • 将参数传递给 TADOStoredProc 的更好方法 (Delphi)

    我需要将大量的 SQL 查询转换为存储过程 我有一些代码可以在一个 Delphi 过程中一次更新大约 20 或 30 个值 我可以创建一个存储过程来完成这样的事情 问题是我将参数传递给存储过程的方法非常庞大 如下所示 with stored
  • __getattr__ 用于静态/类变量

    我有一堂课 比如 class MyClass Foo 1 Bar 2 每当MyClass Foo or MyClass Bar被调用时 我需要在返回值之前调用一个自定义方法 在Python中可以吗 我知道如果我创建该类的实例并且可以定义自己
  • 如何使用 Grails 将文件存储在数据库中

    我需要使用 Grails 在数据库中存储文件 那么 你知道我该怎么做吗 我应该在域类中使用哪种数据类型 byte 可能是一个解决方案 请参阅中的 上传文件 一章Grails 用户指南 还可以使用 java sql Blob 作为二进制内容的
  • 调用“Users.messages: list”时,Gmail API 按什么顺序返回消息

    根据Gmail API 参考 Users messages 列出 列出 用户邮箱中的邮件 根据我的观察 消息按数据降序返回 这是一个正确的假设吗 基本上 我希望能够在几天后处理用户的收件箱 而无需重新处理我已经处理过的邮件 一旦我偶然发现一
  • 列出某个区域或可用区中的所有 EC2 实例类型 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 虽然似乎有几种方法可以将一些 AWSCLI 命令输出和过滤到此列表中 但是否有人有一种很好 简单的方法来列出特定区域的所有 EC2 实例类型 或者该
  • R Markdown:在“参考文献”部分之后放置附录?

    我正在使用 R Markdown 编写一份报告 其中包含参考文献 问题是 R markdown 自动将引用放置在报告的末尾 我想在参考文献之后添加附录 有什么办法吗 我看到可以用子文档但我希望一切都以独特的方式呈现 Rmd file 下面是
  • Python - 是否可以“停止”或“暂停”线程

    我有两个线程 并且 我希望一个线程运行 10 秒 然后让该线程停止 同时另一个线程执行 然后第一个线程再次启动 重复这个过程 所以例如 from threading import Thread import sys import time
  • Xampp访问禁止php

    我是 Windows 用户 我已经使用 xampp 有一段时间了 但突然我的 php 文件现在都不起作用了 我收到此错误消息 禁止访问 您无权访问所请求的对象 它要么是读保护的 要么是服务器无法读取的 如果您认为这是服务器错误 请联系网站管
  • c 数组:动态设置大小?

    我是 C 编程新手 我试图使用变量设置数组的大小 但出现错误 数组 的存储大小不是恒定的 01 int bound bound 4 02 static GLubyte vertsArray bound 我注意到当我更换时bounds 在第
  • .NET 5 使用 Windows Shell 的方式是什么? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我最近将一些软件项目移至 NET 5 我使用 Microsoft WindowsAPICodePack 来与 Windows Shell 配合使用 但该库已经过时 似乎不再维护 此外 它是
  • 如何添加迄今为止的天数

    我想得到给定日期的第二天 午夜 到目前为止我正在使用 givenDate Add time Hour time Duration 24 问题是某些时区如果我添加 24 小时 我就会在同一天停留 在法国 他们偶尔会改变工作时间 使用以下内容添
  • 在 iPy Notebook 中运行 unittest 示例时出现 AttributeError

    我是 iPython 的新手 试图帮助其他开发人员入门 但我们都遇到了同样的问题 我们正在尝试在 iPython 中运行 python 单元测试示例https docs python org 2 library unittest html
  • 原则 2:拯救复杂关系中的实体

    我的学说实体中有以下关系 最喜欢的食谱 ManyToOne targetEntity User inversedBy favoriteRecipes private user ManyToOne targetEntity Recipe in
  • 即使指针从未被取消引用,过数三指针中的硬件陷阱是如何发生的?

    In his 2005 年 11 月 1 日 C 专栏 赫伯 萨特写道 int A 17 int endA A 17 for int ptr A ptr lt endA ptr 5 O 在某些 CPU 架构中 包括 当前的 上述代码 可能会