我一直在寻找在C++中在堆栈或堆上分配对象的经验法则.我在这里找到了许多关于SO的讨论.很多人说,这是关于物体的寿命.如果您需要比函数范围更长的生命周期,请将其放入堆中.这很有道理.
但令我困惑的是,许多人说,如果它们很小,就会将对象分配给堆栈.如果对象很大,请将其放入堆中.但他们都没有说如何识别物体是否很大?
我有以下问题,
vector<string>.它将有大约100件物品.如果我将这个类分配给堆栈,它是否会导致堆栈溢出?我试过这个,但效果很好.不确定我做错了什么.在Linux上,使用C,假设我有一个动态确定的n命名,我必须在一个数组(int my_array[n])中存储的元素数量只是一段时间,比如一个函数调用,其中被调用的函数只使用很少的内存(一些百字节).
大部分n是小的,十分之一.但有时n可能很大,高达1000或1000'000.
我如何计算我的堆栈是否可以保存n*o + p字节而不会溢出?
基本上:我的堆栈上剩下多少字节?
请考虑以下代码:
#include <stdlib.h>
#ifndef TRY
#define TRY struct
#endif
TRY testme
{
int one;
int two;
char three;
int four;
};
int
main (void)
{
{
volatile TRY testme one;
one.one = 2;
one.three = 7;
}
{
volatile TRY testme twos;
twos.one = 3;
}
{
volatile TRY testme one;
one.one = 4;
}
{
volatile TRY testme twos;
twos.one = 5;
}
{
volatile TRY testme twos;
twos.one = 6;
}
{
volatile TRY testme twos;
twos.one = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用React Native的Why-Did-You-Update来分析我的应用在没有必要的情况下重新渲染的位置.我使用Android模拟器来测试我的应用程序.
我在App.js中有这个代码
if (DEBUG) {
let createClass = React.createClass;
Object.defineProperty(React, 'createClass', {
set: (nextCreateClass) => {
createClass = nextCreateClass;
}
});
const {whyDidYouUpdate} = require('rn-why-did-you-update');
whyDidYouUpdate(React, { include: /^./, exclude: /^YellowBox/ });
}
Run Code Online (Sandbox Code Playgroud)
超出最大堆栈大小
我已经理解(来自其他网站)来自包的递归被打破,(无限循环)但我无法理解为什么它在React Native中发生,因为它似乎与React一起工作.
谢谢.
看来我的程序(用 mingw 构建g++)由于堆栈内存不足而崩溃。我使用编译选项-Wl,--stack,64000000来增加堆栈限制,但问题仍然存在。我想知道是否有实用程序或方法来检查程序的当前堆栈限制.exe,以便我可以验证限制确实已更改为该值。
如何确定linux中程序的当前堆栈大小?
据说每个程序的堆栈大小在linux中都是8 MB但是当你使用cat/proc // mmap时它会显示不同的大小.
另外,如何确定关联线程的堆栈大小?既然据说线程有自己的私有堆栈?
我正在编写一些产生相当多线程的代码(目前约为512,但未来可能会更高).每个线程只执行少量操作,因此我希望线程在系统上的开销保持在最低限度.
我正在设置堆栈大小pthread_attr_setstacksize(),我可以从中获得最小的允许堆栈大小PTHREAD_STACK_MIN.但我的问题是:使用PTHREAD_STACK_MIN线程堆栈大小是否安全?我如何计算我需要多少堆栈?是否有任何隐藏的开销需要添加到我的计算中?
此外,还有其他技术可以用来减少线程在系统上的负担吗?
问题说明了一切。尝试增加链接器选项中的堆栈大小会产生错误:
最大堆栈大小必须是65536和16777216之间的整数。
这16MB的限制是Delphi编译器的基本限制,还是IDE施加的任意限制?还有其他增加此值的方法吗?
注意(期待评论...):
我正在尝试使用 babel 模块,babylon, babel-traverse。当我试图替换一个节点时,程序崩溃了Maximum call stack size exceeded。这是我的代码
import * as babylon from 'babylon'
import traverse from 'babel-traverse'
import generate from 'babel-generator'
import * as t from 'babel-types'
const code = `
import a from 'b'
n === 3
`
const ast = babylon.parse(code, {
sourceType: 'module'
})
const visitor = {
BinaryExpression(path) {
console.log((path.node))
path.replaceWith(t.binaryExpression('**', t.numericLiteral(3), t.numericLiteral(4)))
}
}
traverse(ast, visitor)
let generated = generate(ast, null, code)
console.log(generated.code)
Run Code Online (Sandbox Code Playgroud)
我正在使用以下 babel 依赖项,知道吗?
"dependencies": {
"babel-generator": …Run Code Online (Sandbox Code Playgroud) 我的服务中出现 stackoverflow 错误,该错误附加到我的主要活动中。有没有办法更改我的服务中的堆栈大小?我遇到了 Xss 参数,但是,显然它在虚拟机选项中不可用(帮助->编辑虚拟机选项)。
一些背景知识: 当我尝试读取代码中的序列化机器学习模型然后对其进行反序列化时,出现错误。当此模型构建在小型数据集上时,相同的函数可以正常工作,但当我使用更大的数据集构建相同的模型时,该函数就不起作用了。
关于我该怎么做有什么想法吗?
stack-size ×10
stack ×4
c ×3
gcc ×2
linux ×2
android ×1
babeljs ×1
babylonjs ×1
c++ ×1
delphi ×1
delphi-xe2 ×1
exe ×1
heap ×1
java ×1
javascript ×1
mingw ×1
performance ×1
pthreads ×1
react-native ×1
reactjs ×1
timertask ×1