访问类型声明对释放的影响

2023-12-07

在这两种情况下,在声明块之后(当然是在过程结束之前)是否以相同的方式释放内存:

procedure allocation is 
    type T_Integer_Access is access Integer;
begin
    declare
        P : T_Integer_Access;
    begin
        P := new Integer'(5);
    end;
end;

procedure allocation is 
begin
    declare
        type T_Integer_Access is access Integer;
        P : T_Integer_Access;
    begin
        P := new Integer'(5);
    end;
end;

换句话说,访问类型声明对内存释放有影响吗?


存储池(内存区域)很可能来自于类型对象T_Integer_Access分配的内存永远不会被释放,因为您还没有定义自己的存储池;ARM 13.11在(2.a)处说

默认情况下,实现可能会选择使用单个全局存储池,所有访问类型(默认情况下)都会使用该存储池,这可能意味着仅在分区完成时才会自动回收存储。或者,它可能会选择在每个可访问级别创建一个新池,这可能意味着在离开适当的范围时会为访问类型回收存储。其他方案也是可能的。

——换句话说,它不是由语言指定的。

我认为除了库级别之外定义对对象类型的访问是非常不寻常的。我从来没有这样做过,所以我不知道编译器实际上是做什么的。

Update:

valgrind不能在 macOS Sierra 上运行,所以我尝试在 Debian jessie 上使用 GNAT GPL 2016;都是你的Allocation肯定会泄漏内存。

存储池是可最终确定的,因此您可以实现自己的存储池;或者你可能会看,例如,Deepend.

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

访问类型声明对释放的影响 的相关文章

  • Ada 中的派生类型和子类型

    有什么区别 首先 术语 它是 Ada 不是 ADA 它是以 Ada Lovelace 命名的 它不是一个缩写词 子类型与其基类型兼容 因此您可以将基类型的操作数与基类型的操作数混合 例如 subtype Week Days is Integ
  • 有谁知道协议缓冲区的 Ada 插件吗?

    我正在寻找用于协议缓冲区的 Ada 插件 看起来除了 Ada 之外 几乎所有语言插件都可用或正在开发中 嗯 我唯一发现的是这篇论文 不幸的是 我没有找到任何翻译工具的源代码 即你所说的plugin 我唯一能告诉的是该工具是用 C 开发的 U
  • 在 Ada 中创建子类型而不指定范围有什么意义?

    在Ada中 我经常看到这样的东西 type Number is new Integer 这有什么意义呢 难道你就不能快乐吗 Integer 我还看到过这样的代码 type Small Number is range 1 5 这对我来说是有道
  • 在 GPS (Ada IDE) 中使用 glib.h 进行编译时出现问题

    我在尝试在 GPS 中编译 Ada 代码时遇到一些麻烦 当我将 GPS 放入包裹中时 它显示丢失 我尝试使用 apt get 安装 确实如此 但错误仍然存 在 接下来我能做什么 我在 x64 Ubuntu 12 04 上运行 GPS 这是我
  • Ada:gnat gprbuild 如何链接到库中?

    在我正在处理的这个多语言 GPRBuild 项目中 我有一些 C 库文件 a 我需要链接到我的可执行文件中 是否有 gpr 属性告诉它链接什么或无论如何将 l L 开关传递给链接器 或者甚至更好 Project my library is
  • Ada 与 Netbeans

    我下载了 Netbeans 插件 用于使用 Ada 进行编程 但是 我不知道如何将Eclipse链接到Ada平台库 什么应该链接到 IDE lib 等 bin 我不知道该怎么办 安装后Ada 插件模块 http wiki netbeans
  • Ada:从文件中读取

    我正在尝试读取一个包含单列的文件Long Float值在Ada如下 with Ada Text IO use Ada Text IO with Ada Long Float Text IO with Ada Sequential IO pr
  • 什么是“libgnarl”?

    What is libgnarl 我在不同的地方找到了对此的引用 例如在 gcc 源代码中或 gprbuild 的详细输出中 gprbuild 特别报告了有关决定是否libgnarl甚至是必要的 所以它显然是一个可选库 但实际的库是什么 我
  • “在 SPARK Ada 中接受挑战”- 后置条件下的总和鬼函数有意外行为

    我正在 SPARK Ada 中编写一个软件 它需要后置条件来验证函数返回值是否等于数组的求和值 在证明函数所在的文件后 我不断收到一个错误 该错误并没有完全加起来 没有双关语的意图 我将发布代码的屏幕截图以便更好地查看 大小为 10 的数组
  • Ada GPS IDE 似乎找不到 GtkAda

    我已经安装了 GNAT 编程工作室 GPS 和 GtkAda 它们似乎都工作正常 但是当我尝试在 从模板新建项目 下构建简单窗口项目时 我收到一堆错误 提示 文件 gtk ads 未找到 这似乎是一个目录 依赖性问题 GPS 不知道在哪里寻
  • 如何使用“单独”关键字

    我无法找出关键字separateAda 及其深度概念 请举个小例子帮助我理解 假设我有一个嵌套过程 with ada text io use ada text io procedure main is procedure proc is b
  • 从大端数据中提取记录

    我有以下用于网络协议实现的代码 由于协议是大端 我想使用位顺序属性和高阶优先值 但看来我犯了一个错误 With Ada Unchecked Conversion with Ada Text IO use Ada Text IO with S
  • Ada.Containers.Functional_Maps 在 Ada2012 中可用吗?

    有关的信息Ada Containers Functional Maps https docs adacore com gnat rm docs html gnat rm gnat rm the gnat library html ada c
  • Ada:Windows 上的 cmake 和 PLplot 安装

    这是该帖子的后续内容Ada 绘制二维图 https stackoverflow com questions 3210207 ada plotting 2d graphs 我决定创建一个新帖子 因为这是一个单独的问题 Windows 版 PL
  • Ada 通用平均函数

    我有一个函数可以对记录数组中的某个数值进行平均 该值可以是自然类型增量 也可以是枚举类型增量 我让它正确地总结了这些值 但我的问题是 如何将数组的长度转换为通用类型 以便它可以除以整数和增量类型数字 在记录数组上使用 长度 属性 这样做的优
  • 浮点到字符串:字符串长度问题

    我想将浮点值转换为字符串并创建以下简短示例 with Ada Text IO procedure Example is A constant Float 1 234 B constant Float 123 456 789 C consta
  • 使用 SPARK 证明选择排序算法

    我试图证明我在 Ada 中的选择排序实现是正确的 我尝试了一些循环不变量 但使用 gnatprove 只能证明内部循环的不变量 package body Selection with SPARK Mode is procedure Sort
  • 在 Ada 中立即开始循环的下一次迭代

    我想要一个无限循环 其中循环几乎贯穿整个程序 并且在任何时候 基于条件语句 我希望它退出循环的特定迭代并返回到顶部并执行 有办法做到这一点吗 它不必是无限循环 它可以是一个for循环 我只想让它进入该循环的下一次迭代 您可以使用 goto
  • 从 Ada 代码构建静态库,无需 GNAT 即可链接

    我正在尝试从 Ada 代码创建一个静态库 该库可以与一些 C 代码链接 而无需使用 GNAT 工具进行最终链接 我的用例是 我正在尝试将一个用 Ada 编写的库交付给一个为嵌入式目标构建的 C 代码库 为目标构建最终二进制文件的工具链不包含
  • 对于匿名访问类型重载运算符“=”?

    我正在读巴恩斯那本出色的 艾达 一书 这是第 11 7 节中用于深度比较链表的代码示例 type Cell is record Next access Cell Value Integer end record function L R a

随机推荐

  • 发布请求后收到 400 错误请求

    当我发送以下 http post 请求时 POST query fcgi HTTP 1 1 Content Type application x www form urlencoded Content Length 63 form stat
  • 使用 Google Sheet 导入 XML 并每分钟自动刷新

    我有下面的脚本 它在名为 价格 的 google 表中导入一些 XML 数据 一切工作正常 除了我设置了一个时间驱动的触发器每分钟运行一次 但数据不会更新 触发器似乎工作正常 因为我可以看到最后一次运行时间每分钟更新一次 调用 XML 数据
  • 为什么 gcc/clang 处理代码的方式略有不同? (给出的例子)

    所以我在摆弄 C 代码时 我注意到 gcc 和 clang 处理代码的方式 如果我使用可变大小在文件范围中声明一个数组 clang 编译没有问题 但 gcc 会抛出错误 我的猜测是 这与 gcc clang 默认情况下启用 未启用哪些编译器
  • 使用 jQuery 更新 css

    我正在尝试使用 jQuery 更新导航栏的 CSS 通常将 css 定义为 navbar static top navbar nav gt active gt a background color black 我该如何使用类选择器 无需单独
  • 授予远程用户(非管理员)使用 WMI 和 C# 枚举命名空间 cimv2 中 Win32_Service 中的服务的能力

    我正在创建一个看门狗服务 它将监视各种远程服务器 都在同一域中 上的其他服务 我用来连接远程服务器的用户不是管理员 当我尝试枚举 Win32 Service 类中的服务时 出现访问被拒绝错误 我已向用户授予 WMI 控件中 Root CIM
  • 推送到分支时未触发 Github 操作

    My build and test yml文件输入 github workflows如下 name CI on push branches main name of my branch pull request branches main
  • Java接口扩展问题

    我必须实现一个 RMI 服务器 它将作为另外两个 RMI 服务的前端 因此 我决定要做的一个合乎逻辑的事情是让该接口实现其他两个服务的接口 public interface FrontEndServer extends Remote Boo
  • Inno Setup 中不同语言的不同许可证文件

    我在 Inno Setup 中创建了多语言安装文件 如何针对不同语言使用不同的许可证文件 例如 英语语言 gt 英语许可证俄语 gt 俄语许可证 如果您只想要每种语言的自定义许可证 您可以使用指定LicenceFile上的参数 Langua
  • 为什么 SkiaSharp Touch SKTouchAction.Moved 事件不起作用?

    Summary ActionType 为 的情况下永远不会引发 Touch 事件SKTouchAction Moved but SKTouchAction Pressed被提出 为什么 Moved事件永远不会被引发 Detail 我正在尝试
  • 在java中找不到要求创建类的符号

    我有一个类定义如下 public class Myclass public int myvariable 100 if myvariable gt 0 为什么我前面出现错误if condition说明cannot find symbol s
  • 反应寄存器错误不显示

    我正在链接 Web 应用程序的正面和背面 并且在注册部分中 我无法向 UI 显示验证和服务器错误消息 当执行错误注册时 我收到 400 和 401 状态我想显示的消息位于 Axioserror gt response gt data gt
  • 尝试构建正则表达式来检查模式

    a 以数字开头和结尾b 连字符应以数字开头和结尾c 逗号应以数字开头和结尾d 数字范围应为 1 31 编辑 在正则表达式中需要这条规则 谢谢 Ed Heal e 如果数字以连字符 开头 则不能以逗号以外的任何其他字符结尾 并且遵循上面列出的
  • 是否可以在堆栈上创建类的实例?

    我知道在 C 中你可以在堆栈上创建类的实例 例如 MyClass mc MyClass 8 2 或者像在堆上 MyClass mc new MyClass 8 2 你能在 C 中做同样的事情吗 我在 C 中创建类的唯一方法是newing i
  • 使用 R 从 API 中提取数据

    我可以访问 azure 中的一些遥测数据 特别是使用移动应用程序的客户的所有 API 调用 我已经使用 R 中的 httr 包来请求 3 分钟内的数据 并像这样评估响应 显然有我自己的应用程序 ID 和密钥 下面我没有包含 install
  • MySQL INNER JOIN 仅从第二个表中选择一行

    我有一个users表和一个payments表中 对于每个有付款的用户 在表中可能有多个关联的付款payments桌子 我想选择所有有付款的用户 但只选择他们最新的付款 我正在尝试这个 SQL 但我以前从未尝试过嵌套 SQL 语句 所以我想知
  • 如何获取另一个jar中的资源

    我有一个嵌入在捆绑包中的 jar 需要获取与其打包的资源 如下所示 MyBundle src lib MyEmbeddedJar src SomeClass someResource xml 我正在尝试从 SomeClass 访问 some
  • 使用 Macports 偷偷修补源代码

    几乎自从我使用 vim 并了解了足够多的 C 语言以来 我就自定义了已安装的 vim 以删除令我烦恼的 功能 当我改用带有 macports 的 Mac 时 我通过卸载以前的任何 vim 端口 获取源代码 手动编辑源代码 然后让 Macpo
  • Typescript 部分类型推断

    我对此感到困惑 无法弄清楚如何在没有第二个功能的情况下做到这一点 interface Fixed a number const fn
  • Rust HRTB 是相同的,但编译器表示一种类型比另一种更通用

    The 以下代码是完整的类型注释 fn enter lt a F R gt x a i32 func F gt R where F for lt b gt FnOnce b i32 gt R func x fn identity lt a
  • 访问类型声明对释放的影响

    在这两种情况下 在声明块之后 当然是在过程结束之前 是否以相同的方式释放内存 procedure allocation is type T Integer Access is access Integer begin declare P T