直接堆栈和堆访问;虚拟级还是硬件级?

2024-01-24

当我在 SO 上时,我读了很多指导评论(尤其是 C 语言)

“动态分配总是在堆上,自动分配在堆栈上”

但特别是对于普通 C 我不同意这一点。因为 ISO/IEC9899 甚至没有丢弃堆或堆栈的任何字。它只是提到了三种存储持续时间(静态、自动和分配),并建议如何处理它们中的每一个。

如果编译器愿意的话,什么可以让编译器选择这样做,反之亦然。

所以我的问题是:

堆和栈是否物理存在(即使不是在 C 语言中),标准化语言可以说“……必须发生在堆上,而……发生在栈上”?

或者它们只是一个管理内存访问的虚拟系统,因此语言无法对它们制定规则,因为甚至无法确保环境支持它们?

在我的知识库中,只有第二个才有意义。但我已经读过很多次人们写的评论,比如“在 XY 语言中,这将发生在堆栈/堆上”。但如果我是对的,只要该语言不仅仅是为保证有堆栈和堆的系统而设计的,那么这一定是不确定的。所有这些评论都是错误的。

这就是我问这个问题的原因。是我错了,还是在推理过程中存在很大的错误?


您是正确的,C 规范不需要使用堆或堆栈,只要它正确实现存储类即可。

然而,实际上每个编译器都会使用堆栈来存储自动变量,使用堆来存储分配变量。虽然您可以实现不使用堆栈或堆的编译器,但它的性能可能不会很好,并且大多数开发人员都不熟悉。

因此,当人们说“总是”时,他们真正的意思是“几乎总是”。

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

直接堆栈和堆访问;虚拟级还是硬件级? 的相关文章

  • Linux 将虚拟内存范围映射到现有虚拟内存范围?

    在Linux中 有没有一种方法 在用户空间中 将虚拟地址范围映射到支持现有虚拟地址范围的物理页面 mmap 函数只允许映射文件或 新 物理页 我需要能够做这样的事情 int addr1 malloc SIZE int addr2 0x600
  • java中可以有多个堆吗?

    java中可以有多个堆吗 如果可能的话 那么在什么情况下会发生呢 已经存在多个内存区域 但只有一个 Java 堆 通常有 Java heap which might be broken into 伊甸园空间 幸存者空间 任期空间 用于小型直
  • 合成析构函数是否会破坏堆上分配的内存?

    我有一个没有析构函数和构造函数的类 如下所示 class Foo public Foo int a p new int a private int p Foo a 4 这段代码之后 堆上分配的内存会被释放吗 或者我是否必须显式提供这样的析构
  • 如何在运行时监控某些java方法分配的内存

    我正在创建一个 java 程序 其中我的类假设 A 有一些预定义的行为 但用户可以覆盖我的类来改变其行为 因此 我的脚本将检查是否存在某个子类 而不是我将其称为它的行为 但是如果他在代码中编写了一些阻塞代码或内存泄漏怎么办 这可能会损害我的
  • 虚拟内存的最大大小可以是多少?

    我看到这个问题 虚拟内存 和 交换空间 有什么区别 https stackoverflow com questions 4970421 difference between virtual memory and swap space 这里提
  • 我的记忆力够用吗?

    我正在运行 Java 应用程序并收到以下消息 Exception in thread main java lang OutOfMemoryError Cannot allocate new BytePointer 1200 totalByt
  • Jmeter:jmeter中jmeter.sh和jmeter无扩展文件的区别

    我需要澄清 jmeter sh 和 jmeter 文件 不带 ext 它们位于 bin 文件夹中 举例来说 1 如果我在jmeter和jmeter sh文件中设置不同的HEAP大小 将考虑哪一个 2 以上是否取决于我如何运行测试 例如 jm
  • 不同手机/设备和操作系统版本上的 Android 堆大小

    有谁知道Android手机上的堆大小是否是根据操作系统版本中设置的恒定值 或者这是手机生产商可以决定的设置 堆大小与手机上的 RAM 大小成正比吗 我只发现有人说应用程序的堆大小是 16M 的文章 然而 这些文章有点旧了 举个例子 据我所知
  • 运行 Pig 脚本时的堆空间问题

    我正在尝试执行包含大约 3000 万数据的 Pig 脚本 但收到以下堆空间错误 gt ERROR 2998 Unhandled internal error Java heap space gt gt java lang OutOfMemo
  • 虚拟化页表的工作原理

    阅读有关虚拟化页表概念的内容 其中部分页表放入虚拟内存中 维基百科 https en wikipedia org wiki Page table Virtualized page table以及 Patterson 和 Hennessy 页
  • 栈和堆的内存分配

    这似乎是一个非常基本的问题 但它一直在我的脑海中 当我们分配一个局部变量时 它会进入堆栈 类似地 动态分配会导致变量位于堆上 现在 我的问题是 这个变量实际上位于堆栈还是堆上 还是我们只是堆栈和堆中的引用 例如 假设我声明一个变量int i
  • 使用callstack在C中实现堆栈数据结构?

    我对 C 下内存结构的理解是 程序的内存与堆栈和堆分开 每个堆栈和堆都从块的两端生长 可以想象分配所有 RAM 但显然抽象为某种操作系统内存片段管理器 堆栈设计用于处理局部变量 自动存储 堆设计用于内存分配 动态存储 编者注 有一些 C 实
  • Java 堆空间与 GSON

    我正在使用 GSON 创建一些大的 JSON 文件 以从 GTFS Google Transit 创建自定义 JSON 问题是当我从对象类转换为 JSON 时 Gson gson new Gson String rutasJSON gson
  • Linux中分配特定地址

    我想在Linux进程中的特定地址分配一块内存 实际上我想做一些类似的事情 我会有进程号 每个进程都会调用库 由我编写 中的初始化函数 该函数将在进程的地址空间中分配一些内存 它将存储进程相关信息 这将由每个进程完成 一旦分配了该内存 程序就
  • 在生产系统上详细分析 Tomcat 堆

    使用 JMX 控制台分析了在 tomcat 中运行的轻负载 Web 应用程序后 发现 PS Old Gen 增长缓慢但持续 它从 200MB 开始 然后以每小时 80MB 左右的速度增长 CPU不是问题 它平均运行在0 1 但在某个地方它会
  • 如何使用gdb来探索堆栈/堆?

    谁能给我一个快速概述 给我指出一种检查 C 程序堆栈 和堆 的方法的文档 我认为这应该用 GDB 来完成 但如果有其他更直接的替代方案 那么也应该没问题 Thanks 您可以使用 x 命令转储原始内存 因此 如果您想查看堆栈或堆的位 请尝试
  • 加载linux内核的基地址

    我对内核如何加载到内存有一些疑问 检查后 proc kallsyms我能够找到内核中各种符号的地址 cat proc kallsyms head n 10 00000000 t vectors start 80008240 T asm do
  • x86 分页如何工作?

    这个问题旨在填补有关该主题的优质免费信息的真空 我相信一个好的答案将适合一个大的 SO 答案 或者至少适合几个答案 主要目标是为初学者提供足够的信息 以便他们可以自己阅读本手册 并能够理解与分页相关的基本操作系统概念 建议指南 answer
  • 如何以编程方式获取 vmmap 中显示的信息?

    任何看过 Mark Russovich 演讲 揭示内存管理之谜 的人都知道 vmmap 工具可以向您显示与进程限制 普通 32 位 Windows 上为 2GB 相关的内容 而其他工具似乎很少了解这些内容 我希望能够以编程方式监控我的rea
  • Erlang:如何限制分配给进程的内存

    我要问的是是否可以限制分配给特定进程的内存 堆或堆栈 以便该进程不能超过它 也许类似于 process flag min heap size MinHeapSize 但针对最大堆 您可以将某种进程跟踪 gen server 放在一起 定期检

随机推荐

  • 如何制作可运行的jar文件?

    我使用了一个程序来制作可运行的 jar 文件 我现在找到的所有程序都是制作 exe 文件的程序 我记得它还可以选择将文件制作为 sh 脚本 有人知道它的名字吗 我已经搜索了几个小时但没有结果 命令行 java jar file jar 将运
  • Android WebView - 重置 HTTP 会话

    我在 Android 应用程序中使用 WebView 我定期能够重置 WebView http 会话 以便它正在访问的服务器应用程序将初始化一个新会话 我找不到如何做到这一点 这可能吗 Rgds 凯文 我认为清除cookie可以使会话关闭
  • 显示 Visual Studio 代码中的所有警告和错误

    我正在使用 Visual Studio Code 版本 1 6 0 是否有可能显示当前根文件夹中所有文件的错误和警告 目前它仅显示打开文件的错误和警告 2019年更新 ESLint 在 VS Code 中引入了一项新任务 您必须在工作区设置
  • 使用 mschart 在数据点上设置标签

    我想自定义下面数据点上的标签 以便它们呈现为 使用图表上的第一个数据点作为示例 4 10 4 40 黄色类 数据点有一个可以通过编程方式设置的标签属性 DataPoint dp new DataPoint dp Label c Start
  • R XML 从同一节点选择 2 个属性 xmlAttrs()

    进一步推进 TEI 勘探 这是我的 XML Tei 文件 其中包含具有不同属性 时间 从 到 的 日期 节点 我已经使用成功提取了 when 属性的值 dateWhen lt unlist xpathApply doc date xmlGe
  • 情节内的情节

    我有情节1 curve exp x from 1 to 5 lwd 5 curve 150 exp x from 1 to 5 lwd 5 col darkblue add T 在其中我想添加以下情节 2 par mar c 7 7 1 1
  • 是否有任何理由不将 'git fetch' 设置为始终使用 --prune 选项?

    当远程计算机上的分支已被删除时 使用 git fetch prune 删除本地远程跟踪分支 使用以下命令将remote origin prune设置为true git config global fetch prune true 使得使用
  • Git 忽略除某个目录的所有子目录之外的所有特定类型的文件?

    我正在尝试创建一个 gitignore 文件 该文件将忽略所有 jar 文件 除非它们位于名为 libs 的文件夹中 这是我的基本文件结构 gitignore libs goodFile jar someFolder subFolder a
  • 如何在 firebase 托管中包含子目录

    我的网站由主页和文件夹内分隔的子页面组成 如何在我的页面主机中包含子页面 firebase 托管 弗兰克的评论确实是一个答案 Firebase 会在您指定的目录下部署所有内容 因此 如果您的主页 index html 位于当前目录中 而其他
  • TCP RST 数据包详细信息

    为什么 TCP RST 数据包不需要确认 是不是因为RST的发送方每次收到对方的数据包后都会继续发送RST 相关说明 有效的 RST 数据包中的确认号怎么可能是 0 相关说明 RST 数据包中的确认号如何 是 0 因为设置了 RST 位的段
  • 添加千分尺依赖项会导致奇怪的 Spring 代理问题

    我有一个带有私有 Scheduled 方法的简单 Spring Boot 应用程序 SpringBootApplication EnableScheduling public class DemoApplication public sta
  • 为什么 Random.nextLong 不能在 Java 中生成所有可能的 long 值?

    Random 类的 nextLong 方法的 Javadoc 指出 由于 Random 类仅使用 48 位的种子 因此该算法不会返回所有可能的长值 随机javadoc http docs oracle com javase 7 docs a
  • java.lang.ClassCastException: com.mchange.v2.c3p0.impl.NewProxyConnection

    我得到以下信息 java lang ClassCastException com mchange v2 c3p0 impl NewProxyConnection 当下面的代码执行时 你能帮我解决一下吗 ComboPooledDataSour
  • jQuery 动画颜色变化

    我正在尝试将链接颜色从当前颜色更改为其他颜色的动画 window load function article preview h1 a hover function this animate color ffffff 1500 由于某种原因
  • 比较两个日期时间

    label1显示我通过查询从数据库获取的最后交易日期 时间 label2是系统日期 时间 我有一个执行命令按钮的计时器 之后我想检查 label1 中的日期 时间是否小于 5 分钟 如果是这样的话我想展示一下按摩 但我不知道为什么我的代码无
  • 使用phonegap在android模拟器中调试javascript

    我是phonegap 和android 开发的新手 我可以知道如何在模拟器上调试 javascript 错误吗 我听说过 ADB 请问我如何在 Windows 7 系统上使用和安装它 我有一个使用 jsonp 调用的 ajax 但模拟器上没
  • 用标志交换存储库

    我有一个 IRepository 接口 其中包含许多 T 和多个实现 按需数据库 Web 服务等 我使用 AutoFac 为许多 T 注册 IRepository 具体取决于我想要为每个 T 指定的存储库类型 我还有一个基于 NET 缓存的
  • UnsupportedClassVersionError:WebSphere AS 7 中的 JVMCFRE003 错误主要版本

    我收到这个错误 java lang UnsupportedClassVersionError JVMCFRE003 错误的主要版本 类 地图 CareMonths 偏移 6 我的 Eclipse 的 Java 编译器设置为1 6我在 C P
  • 使用 Traefik 进行 SSL 直通

    我需要将 SSL 连接直接发送到后端 而不是在我的 Traefik 上解密 后端需要接收https请求 我尝试了 traefik frontend passTLSCert true 选项 但在访问我的 Web 应用程序时收到 404 页面未
  • 直接堆栈和堆访问;虚拟级还是硬件级?

    当我在 SO 上时 我读了很多指导评论 尤其是 C 语言 动态分配总是在堆上 自动分配在堆栈上 但特别是对于普通 C 我不同意这一点 因为 ISO IEC9899 甚至没有丢弃堆或堆栈的任何字 它只是提到了三种存储持续时间 静态 自动和分配