我有这个(编译)代码: 编译器是否处理了 A 和 B 中的向量? Afaik 要销毁像 A 和 B 一样分配的 object,我必须显式调用析构函数。 我在这里不这样做,我想知道当 scope 结束时,是否仍然为 A 和 B 的成员向量调用析构函数。 这当然是必要的,因为他们管理堆资源。 ...
我有这个(编译)代码: 编译器是否处理了 A 和 B 中的向量? Afaik 要销毁像 A 和 B 一样分配的 object,我必须显式调用析构函数。 我在这里不这样做,我想知道当 scope 结束时,是否仍然为 A 和 B 的成员向量调用析构函数。 这当然是必要的,因为他们管理堆资源。 ...
我写了一个小型的工作插件服务器。 插件是使用.so共享对象实现的,这些共享对象在运行时通过调用dlopen (标题<dlfcn.h> )在“服务器”中手动加载。 所有共享的 object 插件都具有相同的接口:extern "C" void* do_something() { r ...
我试图弄清楚alloca()在 memory 级别上的实际工作方式。 来自linux 手册页: alloca() function 在调用者的堆栈帧中分配大小字节的空间。 当调用 alloca() 的 function 返回给它的调用者时,这个临时空间会自动释放。 这是否意味着alloca()会 ...
我的应用程序有一个main功能,我分配了例如配置文件的路径等。目前我为它们使用malloc ,但它们永远不会被释放,并且在应用程序的整个生命周期中始终可用。 我什至从未释放它们,因为操作系统已经在应用程序终止时自动回收分配的内存。 在这一点上,是否有任何理由不使用alloca而不是 malloc,因 ...
我正在更新一个旧的 C++ DLL 项目。 对于导出的函数之一,有 W2A宏定义为 Visual Studio 2019 使用以下编译器警告标记 W2A 宏 我将如何对 W2A 宏进行建议的更改? 还是我应该忽略警告? 之后我的USES_CONVERSION 宏定义为 ...
GCC C++ 编译器(还有许多其他 C++ 编译器)提供非标准扩展,例如 alloca()用于基于堆栈的分配可变长度 arrays,因为它们是 C 标准的一部分从基本的角度来看,这些可以在 C++20 协程中使用吗? 有可能吗? 如果是的话,这是如何实现的? 据我了解,C++20 协程通常在第 ...
我正在尝试实现自己的数学库,并且从向量开始。 想法是给 class 一个指向数字数组的指针,然后复制该数组并将其存储在私有变量指针给出的数据地址中。 首先,我使用alloca尝试为私有变量释放一些 memory vml.h 主文件 这不会产生任何错误,但是由于某种原因, alloca在调用两个实 ...
我在 c 中有这个简单的代码 我希望为 alloca function 生成的汇编代码只会递减堆栈指针(一个子指令),并且可能会进行一些对齐(一个和指令),但生成的汇编代码非常复杂,甚至比您预期的效率低。 这是objdump -d main.o的 output ,在gcc -c的 output 上 ...
这些天我经常使用alloca来分配临时缓冲区。 在我的应用程序(信号处理)中,这是一个常见的需求。 问题是: 分配多个数组时,只使用一次 alloca 是否更好(性能方面)? 像这样: 或者像这样多次使用它: 我的意思是它可能所做的只是减少堆栈指针并可能进行“堆栈探测”,这取决于大小, ...
为什么调用alloc( )作为另一个函数调用的参数,例如func(x, alloca(size), z); 被认为是错误的根据一本叫the linux programming interface的书 这是因为 alloca() 分配的堆栈空间将出现在函数参数空间的中间(放置在堆栈帧内的固定位置) ...
当我运行此代码时,每次调用都会收到此错误: 我使用的是 Visual C++ 2019,stdc++14 和 stdc++17 都会产生相同的错误。 这段代码有什么问题? ...
(GNU) C 至少提供了两种机制来操作堆栈上的变量数据——第一个是alloca函数及其相关函数(例如strdupa ),第二个是“可变长度数组”功能。 alloca的问题在于它似乎没有在内存中分配连续区域 - 程序 印刷 这表明后续分配可能会返回四倍的单词(但我希望它是特定于实现的 ...
我对组装很陌生,我目前正在阅读一本名为《初学者逆向工程》的书,我读到了关于堆栈上 memory 分配的部分。 我理解(我认为)堆栈分配的概念,但在示例中有些东西我不理解,如果有人能提供帮助,我会很高兴。 本书以function为例: 我了解 C function 的作用。 它在堆栈上分配 600 字 ...
我正在尝试将 C(不是 C++)程序从 GCC 移植到 Visual Studio。 GCC 特定的 function strdupa() 广泛用于该程序。 有什么方法可以为 Visual C 实现这个 function。 PS。 我知道它使用 alloca() 并且不安全。 但它现在在 GCC ...
在编写一些大型代码库的测试和分析过程中,我不得不用自己的方法替换对 alloca() 的数千次调用。 在我的目标平台上,如果数字为零,alloca() 将失败,因此我们要断言是这种情况。 我们还想提供一个单一调用的 alignment 版本。 但是, alloca() 具有与 scope 相关的特定 ...
背景(可能有更好的方法来做到这一点):我正在开发一个 Julia 库,我在其中手动管理 memory; 我mmap一个大块,然后主要将其视为堆栈:函数接收指针作为参数,如果它们分配 object,它们将向被调用者返回一个递增的指针。 该被调用者本身可能不会增加指针,并且只返回它收到的原始指针,如果 ...
malloc分配的malloc可以使用realloc重新分配。 alloca有类似的功能吗? 如果不希望在堆上分配内存,并且需要多次分配变量堆栈内存,例如在库函数中需要动态内存但不想要在堆上分配,因为库的用户可能使用自定义堆分配策略。 它看起来像这样: 重要的是这一切都发生在堆栈上 ...
如何在堆栈上分配内存并让它指向不同的内存地址,以便稍后使用? 例如。 这段代码: 每次都会打印出相同的地址。 我怎样才能将内存写入堆栈(不是堆,没有 malloc)并且让它不覆盖已经在堆栈上的其他东西。 ...
我试图写一个函数,传递一个函数用于分配作为其参数; 它应该接受任何类型为void *(*)(size_t)有效分配器。 但是,当我尝试使用alloca作为分配器时,我遇到了奇怪的行为 - 构建一个指向alloca函数的函数指针编译得很好,但会导致链接器错误: 结果是 这与内联 ...