函数包装器中的堆栈分配/函数中的分配

2024-02-17

我正在寻找一种将堆栈分配包装在抽象数据类型中的方法。例如,我想要一个可以通过堆栈上的分配严格工作的向量。我最大的障碍当然是alloca仅在当前堆栈框架内工作 - 因此我没有看到将其包装到函数中的简单方法。

到目前为止,我认为做到这一点的唯一方法是使用类似宏的函数,这些函数保证被编译到给定的堆栈帧中。我不喜欢这种方法,因为它不像人们希望的那样类型友好,并且需要比预期更详细的命名。

无论如何,我可以得到一个函数来在其调用者堆栈上分配吗?我知道这通常会破坏立即调用堆栈,因此很可能该函数也必须以某种方式强制内联。我不清楚我有什么选择,所以我正在寻找一些想法,或指向可能的选择的指示。


Notes:

最终目标就像是std::vector它严格作用于立即函数堆栈。显然它只会作为const对象被调用者,它的生命随着函数的结束而结束。

C 方法很好,只要它比我的基于宏的方法更好。虽然一些支持宏也是可以接受的。

我知道这是一个相当具体的优化,最好我希望能够(使用标志)打开/关闭它(仅使用普通的 std::vector 进行调试)。它会给我们代码的重要部分带来轻微的速度提升,但可能不足以证明通过太多奇怪的结构使其不可读。

Answer:很可能这是不可能的,只有宏观方法才有效。


你不能。
当函数返回时,其堆栈被展开,堆栈指针返回到之前的位置。如果你不想造成真正的混乱,就必须这样做。 alloca 所做的只是移动堆栈指针,因此函数返回会撤消此分配。
宏会起作用,因为它们只是将代码添加到同一函数中。但这将是丑陋的,没有真正改善的希望。

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

函数包装器中的堆栈分配/函数中的分配 的相关文章

  • GCC C++ (ARM) 和指向结构体字段的 const 指针

    假设有一个简单的测试代码 typedef struct int first int second int third type t define ADDRESS 0x12345678 define REGISTER type t ADDRE
  • MEX 文件中的断言导致 Matlab 崩溃

    我正在使用mxAssert 宏定义为matrix h在我的 C 代码中 mex 可以完美编译 当我调用的 mex 代码中违反断言时 该断言不会导致我的程序崩溃 而是导致 Matlab 本身崩溃 我错过了什么吗 这是有意的行为吗 当我查看 M
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 获取两个字符串之间的公共部分c# [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要的是获取两个单词之间的共同部分并获取差异 例子 场景1 word1 感言 word2 Test 将返回 公共部分Test 不同之
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • 为什么 BOOST_FOREACH 不完全等同于手工编码的?

    From 增强文档 http www boost org doc libs 1 48 0 doc html foreach html foreach introduction what is literal boost foreach li
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • gdb 在 docker 上立即退出“进程已完成,退出代码 1”或 lldb“数据包返回错误 8”。另外:如何在 docker 中允许进行 C++ 调试

    这花了我一整天的时间才找到 所以我将其发布以供将来参考 我正在 docker 镜像上开发 C 我正在使用克利翁 我的代码是在调试模式下编译的 并且在运行模式下运行良好 但是当尝试调试时 进程会立即退出 并显示非常丰富的信息 Process
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C

随机推荐

  • 注意:未定义索引:变量

    我正在尝试构建以下表格
  • 在Java中,当文件被其他线程锁定时,有没有办法读取该文件?

    因此 我使用以下命令在文件上创建锁定 以便我可以专门对其进行编辑 File file new File filename channel new RandomAccessFile file rw getChannel lock channe
  • HTML5 视频 - 暂停加载/部分加载

    有没有办法预加载视频的一部分 而不是整个视频 我注意到有一个 暂停 事件 表明视频预计不会下载 直到有进一步指示 但我不确定如何触发此事件 我的目标是预加载视频的一部分而不占用所有用户的带宽 Thanks 您可以使用 XHR 预取任何 UR
  • Java SafeVarargs 注释,是否存在标准或最佳实践?

    我最近接触到了java SafeVarargs注解 谷歌搜索 Java 中的可变参数函数不安全的原因让我很困惑 堆中毒 擦除类型 所以我想知道一些事情 是什么使得可变参数 Java 函数在 SafeVarargs有什么意义 最好以深入示例的
  • 自定义包名称 cxf-codegen-plugin

    想象一下这个场景 我有一个名称空间为 a b c 的 wsdl 文件 它导入另一个名称空间为 m n o 的 wsdl 文件 不幸的是 它们都定义了相同的 ComplexTypes XYZ 现在 当我使用 cxf codegen plugi
  • grep IP 地址和开放端口 nmap

    我正在尝试使此脚本使用 nmap 的开放端口来 grep IP 地址 但我无法以正确的方式执行此操作 我有这样的事情 nmap 192 168 0 0 24 sU p 44555 grep oP 0 9 1 3 3 0 9 1 3 gt o
  • 支持 CORS 的服务器发送事件

    我在用ServiceStack 中的服务器发送事件 https github com ServiceStack ServiceStack wiki Server Events我需要允许它跨来源使用 我已经设置了ServiceStackCor
  • C++:有意限制 CPU 使用

    在我的公司 我们经常在 CPU 压力下测试 USB 和 FireWire 设备的性能 我们运行一个测试代码来加载 CPU 它经常用于非常简单的非正式测试 以了解我们的设备性能会发生什么变化 我查看了相关代码 它是一个简单的循环 它增加计数器
  • Python正则表达式处理不同类型的日期

    我正在尝试编写一个正则表达式来识别一些日期 我正在处理的字符串是 string these are just rubbish 11 2 2222 24 3 1695 194475 12 13 1111 32 11 2000 these ar
  • 如何在调用 gnuplot 时保持 PyQt5 响应?

    我正在尝试使用 Python GUI 和 gnuplot 创建绘图 我正在用 Python 生成代码并将其发送到 gnuplot 这基本上适用于将数据传输到 gnuplot 但是 缺点 Python 程序将被阻止 直到您关闭 gnuplot
  • CL.exe 退出代码

    有人知道我在哪里可以获得 CL exe 退出代码列表及其含义吗 谷歌在这方面不是我的朋友 我得到的特定代码 4 似乎也没有得到任何点击 虽然代码 4 的含义很好 但我更喜欢一个实际上列出所有代码的网站 无证 但进程返回 Windows 错误
  • QSharedPointer::isNull() 和 operator!() 之间的区别

    在 Qt 文档中我们读到 bool QSharedPointer operator const Returns true if this object is null This function is suitable for use in
  • 其余暴露的 spring-data 的全局异常处理

    使用 spring data rest 公开存储库我想覆盖默认的异常处理 阅读文档在我看来最好的方法是使用 ControllerAdvice 注释类 ControllerAdvice class GlobalControllerExcept
  • 使用 post 时未定义索引

    我在 POST 变量上收到未定义的索引错误 IE POST 主机名 我知道为什么我会得到它们 但是有没有办法将 php 和表单保存在同一个文件中并且不会出现这些错误 h1 Please enter your database informa
  • 为什么要调用移出对象的析构函数?

    考虑下面的代码 struct foo std string id int main std vector
  • async-await 的延续爆发 - 行为不同?

    我有一个 winform 代码 单击按钮后运行 void button1 Click object sender EventArgs e AAA async Task BBB int delay await Task Delay TimeS
  • 在spark中,是否可以重用DataFrame的执行计划以将其应用于不同的数据源

    我有一个有点复杂的管道 pyspark 需要 20 分钟才能制定执行计划 由于我必须使用不同的数据帧 作为源 多次执行相同的管道 我想知道是否有任何选项可以避免每次都构建执行计划 构建一次执行计划并将其与不同的源数据重用 有一种方法可以满足
  • 提升后代类中方法可见性的最佳方法

    详细说明这个问题的最佳方法是举一个我正在尝试做的事情的例子 我定义一个 基类 TMyBaseClass class TPersistent protected procedure Foo const AValue String virtua
  • 如何使打印机在 MS VC++ Express 版本中以 C 语言工作?

    我正在使用 VC 2008 Express Edition for C 当我尝试运行此命令时 Demonstrates printer output include
  • 函数包装器中的堆栈分配/函数中的分配

    我正在寻找一种将堆栈分配包装在抽象数据类型中的方法 例如 我想要一个可以通过堆栈上的分配严格工作的向量 我最大的障碍当然是alloca仅在当前堆栈框架内工作 因此我没有看到将其包装到函数中的简单方法 到目前为止 我认为做到这一点的唯一方法是