问题标签 [alloca]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
871 浏览

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

当您总是可以在堆栈上分配一个足够大以适应所有用途的固定大小的缓冲区时,为什么还要使用 alloca()?这不是一个修辞问题...

0 投票
2 回答
3001 浏览

c - alloca 是完全可以替换的吗?

alloca我已经阅读了很多已过时且不应使用的地方,而应使用可变长度数组。

我的问题是:alloca完全可以用可变长度数组替换吗?

在我的特定实例中,我有一些看起来像这样的东西:

我是否遗漏了某些东西,或者这是对 alloca 的实际使用?还假设对于这个例子,由于某种原因,我希望在堆栈上分配值

0 投票
2 回答
1887 浏览

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

我有两个问题:

1) 是否可以实现一个分配器,它使用 alloca 在堆栈上分配内存,否则是否符合 C++ STL?

如果那里有代码,您只需将我指向 URL 即可让我高兴。:-) 如果那里没有代码,也许您可​​以绘制函数分配和解除分配?

2)如果上述问题的答案是“是”,我想了解如何在堆栈上为类成员分配内存。例如,考虑一个

并假设调用此向量的成员函数“resize”首先调用分配器的“deallocate”,然后调用“allocate”。

调用 allocate 的范围是成员函数 resize 的范围。这是否意味着在该函数调用结束时从堆栈中删除分配的内存?

亲切的问候,比约恩

0 投票
1 回答
1213 浏览

c - 使用 malloc 或堆栈的 C sprintf 函数

我听说有sprintf()一个.free()alloca()

任何一种方法对我来说都很好。谁能告诉我我在想什么功能?

0 投票
2 回答
726 浏览

c++ - 如何在 execvp() 的实现中替换 alloca?

看看execvp这里的 NetBSD 实现:

http://cvsweb.netbsd.se/cgi-bin/bsdweb.cgi/src/lib/libc/gen/execvp.c?rev=1.30.16.2;content-type=text%2Fplain

请注意第 130 行的注释,在处理的特殊情况下ENOEXEC

我正在尝试将此实现移植execvp到独立的 C++。 alloca是非标准的,所以我想避免它。(实际上我想要的功能execvpe来自FreeBSD,但这更清楚地说明了问题。)

我想我理解为什么如果malloc使用 plain 会泄漏内存 - 虽然调用者execvp可以在父级中执行代码,但内部调用execve永远不会返回,因此函数无法释放memp指针,并且无法将指针返回到呼叫者。但是,我想不出一种替代方法alloca——避免这种内存泄漏似乎是必要的魔法。我听说 C99 提供了可变长度数组,但我无法使用它,因为最终的目标是 C++。

是否可以替换这种使用alloca?如果要求它保留在 C++/POSIX 中,那么在使用此算法时是否存在不可避免的内存泄漏?

0 投票
1 回答
677 浏览

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

我刚刚读到,如果 Windows 程序_alloca在堆栈上需要超过 4k 的空间,它们会调用函数入口来增加堆栈。我猜测每次访问保护页面时,windows 都会为堆栈分配一个新页面,因此_alloca以 4k 步访问堆栈以分配空间。

我还读到这仅适用于 Windows。如果不需要,linux(或其他ose)如何解决这个问题_alloca

0 投票
2 回答
456 浏览

c - 如何使用 alloca 分配 C 函数指针?

C一直是个谜!

我正在实现一个工作组线程执行模型,在该模型中我试图使用 alloca 作为更快的内存分配选项。在尝试通过使用 alloca 存储在堆栈中的函数指针执行代码时,我遇到了一个奇怪的分段错误。

这是一个导致类似分段错误的牙签代码:

当我执行上述代码时,我在 tnew->f() 行出现分段错误。GDB 回溯对我没有多大帮助。

请解释上面代码中的错误。我是第一次使用alloca。

非常感谢你!

0 投票
6 回答
924 浏览

c - 返回分配指针

此代码是否返回对堆栈上分配的变量的无效引用?要不然是啥:

或者它是由 alloca 实现/编译器支持处理的特殊情况f(alloca(size), alloca(size))

0 投票
2 回答
681 浏览

c++ - 何时使用 alloca 为类成员分配内存?

它是在主函数结束时释放还是在构造函数执行后立即释放?如果上面的代码按预期工作,那么有一个这样的字符串类是个好主意吗?

更新:

看起来主要的危险是

  1. 堆栈溢出
  2. 构造函数的内联

我认为我可以通过将 alloca 用于小尺寸并使用 malloc/free 用于大尺寸来处理 StackOverflow。我想必须有一些非便携式编译器特定的方式来强制编译器内联。

我很感兴趣,因为字符串类是在任何 c++ 项目中广泛使用的东西。如果我做对了,我预计会有巨大的性能提升,因为大多数分配都进入堆栈,否则会进入堆。这将是一个实用程序,最终用户不会知道内部结构。

0 投票
4 回答
1531 浏览

portability - alloca(0) 在各种平台上做什么和返回?

如果给定的大小为 0,是否alloca()返回 NULL?

快速搜索显示 alloca(0)在某些情况下强制垃圾收集!但我最感兴趣的是返回值。

谢谢