alloca相关内容

是否有一个使用 alloca 并且符合 C++ STL 的分配器?

我有两个问题: 1) 是否可以实现一个使用 alloca 在堆栈上分配内存并且符合 C++ STL 的分配器? 如果那里有代码,您只需将我指向 URL 即可让我开心.:-)如果没有代码,也许你可以画出函数分配和解除分配? 2) 如果上述问题的答案是“是",我想了解如何在堆栈上为类成员分配内存.例如,考虑一个 std::vector> 并假设调用此向量的成员函数“resize" ..
发布时间:2022-01-22 12:31:39 C/C++开发

堆栈增长如何在 Windows 和 linux 上工作?

我刚刚读到 Windows 程序在函数入口调用 _alloca 来增加堆栈,如果它们需要超过 4k 的堆栈.我猜想每次访问保护页面时,windows 都会为堆栈分配一个新页面,因此 _alloca 以 4k 步访问堆栈以分配空间. 我还读到这仅适用于 Windows.如果linux(或其他ose)不需要_alloca,他们如何解决这个问题? 解决方案 Linux 依赖于一个高度优化的 ..
发布时间:2022-01-22 12:26:40 服务器开发

在什么情况下 alloca() 有用?

当您总是可以在堆栈上分配一个足够大以适应所有用途的固定大小缓冲区时,为什么还要使用 alloca()?这不是一个反问句…… 解决方案 如果缓冲区的大小在运行时变化,或者您只是有时需要它,这可能会很有用:这将比固定使用更少的堆栈空间 -每次调用中的大小缓冲区.特别是如果函数位于堆栈的高位或递归. ..
发布时间:2022-01-22 12:25:28 C/C++开发

Alloca 实现

如何在 D、C 和 C++ 等语言中使用内联 x86 汇编程序实现 alloca()?我想创建一个稍微修改过的版本,但首先我需要知道标准版本是如何实现的.从编译器读取反汇编无济于事,因为它们执行了很多优化,而我只想要规范形式. 编辑:我想困难的部分是我希望它具有正常的函数调用语法,即使用裸函数或其他东西,使其看起来像正常的 alloca(). 编辑#2:啊,这到底是怎么回事,你可以假设 ..
发布时间:2021-12-18 09:14:39 其他开发

为什么使用 alloca() 不被认为是好的做法?

alloca() 在堆栈上而不是在堆上分配内存,就像 malloc() 的情况一样.因此,当我从例程返回时,内存被释放.所以,实际上这解决了我释放动态分配内存的问题.释放通过 malloc() 分配的内存是一个令人头疼的问题,如果以某种方式错过会导致各种内存问题. 尽管具有上述特性,为什么不鼓励使用 alloca()? 解决方案 答案就在 man 页面(至少在 Linux): ..
发布时间:2021-11-27 08:08:12 其他开发

为什么alloca两次返回相同的地址?

我正在尝试实现自己的数学库,并且从向量开始.想法是给该类一个指向数字数组的指针,然后复制该数组并将其存储在私有变量指针给定的数据地址中.首先,我使用 alloca 尝试为私有变量释放一些内存 vml.h namespace vml {//向量模板vec类{民众:vec(in_type * in_data){st ..
发布时间:2021-04-03 18:34:10 C/C++开发

gooca在alloca的功能范围内有效吗?

C标准禁止进入VLA存在的功能范围. 在低级别上,VLA和对alloca函数的调用应具有相同的结果. (我可能是错的,因为我只是C语言,不是低级程序员,但按照我的想象,它似乎很机智) 那么下面的代码片段也会被不确定吗? int main() { char *p; goto label1; { p = _alloca(1); lab ..
发布时间:2020-07-16 19:52:52 其他开发

gcc对alloca的处理如何?

在大多数平台上,alloca可以归结为对堆栈指针的内联调整(例如,从x64上的rsp中减去,再加上一些逻辑来保持堆栈对齐). 我正在查看gcc为alloca生成的代码,这很奇怪.举一个简单的例子 1 : #include #include volatile void *psink; void func(size_t x) { psin ..
发布时间:2020-07-16 19:52:47 其他开发

是否可以预测Linux上C语言中的堆栈溢出?

在某些情况下,可能会导致x86 Linux系统上的堆栈溢出: 堆栈上的 struct my_big_object[HUGE_NUMBER].经过它最终会导致SIGSEGV. alloca()例程(与malloc()相似,但使用堆栈,自动释放自身,并且如果SIGSEGV太大,则将其炸毁). 更新:我最初所说的alloca()并未被正式弃用;只是气. 有没有一种方法可以以编程方式检测本地 ..
发布时间:2020-07-16 19:52:45 服务器开发

alloc,malloc和alloca —有什么区别?

给我的印象是,Objective-C中的alloc(当我们调用[anyObject alloc]时实际上正在实现C函数malloc,并且在堆中分配了内存,但是找不到任何答案). /p> 此外,在搜索alloc时,我发现alloca可以在堆栈中分配内存.如果我没看错,alloc在堆中分配内存以创建对象. 那么,alloc和malloc(以及alloca)之间有什么区别?有人可以总结一下吗? ..
发布时间:2020-05-05 12:33:46 其他开发

在Windows和Linux上,堆栈增长如何工作?

我刚刚读到,如果Windows程序需要大于4k的堆栈,则它们会在函数入口上调用_alloca来增大堆栈.我想知道每次访问防护页面时,Windows都会为堆栈分配一个新页面,因此_alloca以4k的步长访问堆栈以分配空间. 我还读到这仅适用于Windows. linux(或其他oses)如何在不需要_alloca的情况下解决此问题? 解决方案 Linux依赖于高度优化的页面错误处理, ..
发布时间:2020-05-01 09:16:02 服务器开发

可变大小类的分配

我有一个可变长度的数据结构,多维迭代器: class Iterator { public: static迭代器& init(int dim,int * sizes,void * mem) { return *(new(mem)Iterator } static size_t alloc_size(int dim) { return sizeof(Iterator) ..
发布时间:2016-10-30 00:18:06 C/C++开发

有一个allocator使用alloca,否则是C ++ STL兼容?

我有两个问题: 1)是否可以实现一个使用alloca在堆栈上分配内存的分配器,否则是C ++ STL兼容? p> 如果有代码,你可以让我快乐,只需指向我的URL。 :-) 如果没有代码,也许你可以草拟函数allocate和deallocate? 2)如果上面的问题的答案是'yes',我想了解如何在类成员的堆栈上分配内存。作为示例,考虑 std :: vector ..
发布时间:2016-10-17 10:14:30 C/C++开发

返回指针的alloca

这是否code返回的无效引用在栈上分配的变量?或者是什么: 无效* F(为size_t SZ){ 返回的alloca(SZ); } 抑或是受了alloca执行/编译器的支持,比如 F(的alloca(大小)的alloca(大小))处理将是一个特例? 解决方案 的alloca 分配在的堆栈帧空间F 。你不能做任何有用的东西与它曾经在函数返回(它没有“保留”了)。 中,al ..
发布时间:2016-08-25 09:19:15 C/C++

在这种情况下,是的alloca()有用吗?

为什么你想使用的alloca()的时候,你总是可以堆栈足够大,以适应各种用途上分配一个固定大小的缓冲区?这不是一个反问句... 解决方案 这可能如果缓冲区的大小在运行时变化是有用的,或者如果你只是偶尔需要它:这将不是一个固定的整体使用更少的栈空间大小的缓冲区中的每个电话。特别是如果功能更是高达栈或递归的。 ..
发布时间:2016-08-18 15:20:06 C/C++开发

什么是的alloca(n)和焦X [n]的区别?

是什么之间的区别 void *的字节=的alloca(大小); 和字节的char [大小] //或者更precise,焦X [大小] void *的字节= X; ...其中的尺寸的是一个变量,其值是在编译时未知的。 解决方案 的alloca(),直到当前函数结束不回收内存,而可变长数组将收回在当前段结束的记忆。 换句话说:无效美孚() { 为size_t大小= 42; ..
发布时间:2016-08-18 15:08:52 移动开发

为什么用,alloca的()没有考虑好的做法呢?

的alloca()从栈中分配内存,而不是堆这是在情况的malloc()。所以,当我从常规返回内存被释放。所以,其实这解决了我腾出的动态分配的内存的问题。内存释放通过分配的malloc()是一个大难题,如果种种原因错过导致各种内存问题。 为什么使用的alloca()气馁,尽管上述特点? 解决方案 答案是正确的,在该人页(至少在Linux上): 返回值 中,alloca()函数返回一 ..
发布时间:2016-08-17 20:25:45 C/C++

是ALLOCA彻底更换?

我读过不少地方的的alloca 已过时,不应使用和变长数组应该使用。 我的问题是:是的alloca 通过变长数组完全更换? 在我的特定情况下我有东西,看起来像这样的: typedef结构{ INT *值; 为size_t的大小; } some_type;无效SomeExternalFunction(some_type);...无效美孚(){ //我想到了就去做 some ..
发布时间:2016-06-01 21:19:11 其他开发