当前位置: 首页 > 知识库问答 >
问题:

一种可移植的C语言,可以替代保证不受堆分配的复合文字

傅边浩
2023-03-14

C中不支持C99复合文字。在许多情况下,列表初始化提供了一个很好的选择。但是,不能保证它们不会堆分配内存

对于需要完全无需堆分配即可工作的C代码,是否有任何方便且可移植的替代方案?

共有2个答案

方和宜
2023-03-14

如果您的程序完全在没有堆分配的情况下工作,则添加列表初始化将没问题,并且不会导致堆内存分配。

iist初始化可能导致堆分配的情况是对象已经使用堆内存的情况,例如std::list。如果您是无堆的,那么您肯定不会使用这些。

任繁
2023-03-14

正如链接问题的答案所示,由于C 14编译器无法堆分配初始值设定项列表。此外,即使是C 14之前的编译器也不会堆分配初始值设定项列表,因为绝对没有理由这么做(而且有很多理由不这么做)。

 类似资料:
  • 分支预测已经在StackOverflow上讨论了几次。然而,我并没有具体找到我所寻找的答案 在优化阶段,我需要避免分支预测失误。我需要做一些验证。它看起来像: 当然,在正常的预期工作流中(大多数情况下都会发生),我们不会抛出异常,因此我们不会输入if。 我知道在常见的if/else范式中,我们可以通过将最可能的分支放在if中,将可能性较小的分支放在else中来提示编译器(可移植分支预测提示)。但是

  • 一般说来, 可移植性并非汇编语言的长项。 然而, 写出能够在不同平台上执行的汇编代码仍然是可能的事情, 特别是在使用 nasm 的时候。 我曾经写过一个汇编语言函数库, 可以在 Windows® 或 FreeBSD 这样不同的操作系统下进行汇编。 所以, 让你的代码在两种不同但是又基于相似的结构的平台上运行是完全可能的。 比如, FreeBSD 是 UNIX® 操作系统,Linux 是类UNIX

  • WebAssembly的二进制格式是被设计成可在不同操作系统与指令集上高效执行的,无论在Web或非Web环境中。 对高效执行的设想 尽管执行环境是有条件的,本地的,不确定的,也不要向WebAssembly提供下述特性。有些情况下为了WebAssembly模块执行,也许不得不模拟一些宿主硬件或操作系统不提供的特性,让它们似乎被支持。这种情况将会导致糟糕的性能。 随着WebAssembly的标准化推进

  • 我在实践中读到了一致性。现在我想了解如何处理InterruptedException 来自书籍的建议: -传播异常(可能在特定于任务的清理之后),使您的方法也成为可中断的阻塞方法;或者,恢复中断状态,以便调用堆栈中更高级别的代码可以处理它 -只有实现线程中断策略的代码才能吞咽中断请求。通用任务和库代码绝不应吞没中断请求。 前两种说法我很清楚,但第三种我不明白。你能澄清一下吗?最好提供示例。 吞下中

  • 2.2.1.可移植性 Linux可以轻松地移植到各种不同的硬件平台上。有了Linux做硬件抽象层,Android就不必为不同硬件的兼容性而劳心。Linux 的绝大多数底层代码都是用可移植的 C 代码编写,因此第三方开发者可以将 Android 移植到很多不同的设备上。

  • "C语言结合了汇编的强大功能和可移植性" -- 无名氏,暗指比尔.萨克。 可移植代码的好处是有目共睹的。这一节将阐述一些编写可移植代码的指导原则。这里"可移植的"是指一个源码文件能够在不同机器上被编译和执行,其 前提仅仅是在不同平台上可能包含不同的头文件,使用不同的编译器开关选项罢了。头文件包含的#define和typedef可能因机器而异。一般 来说,一个新"机器"是指一种不同的硬件,一种不同的