问题标签 [allocation]

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 回答
2127 浏览

c - malloc 在另一个函数中

我必须从另一个函数中分配一个结构,显然是使用指针。我已经盯着这个问题看了好几个小时,并尝试了上百万种不同的方法来解决它。

这是一些示例代码(非常简化):

这确实在分配调用之前和之后给了我相同的地址:

我知道这可能是因为它在函数中创建了一个副本,但我不知道如何实际处理我作为参数给出的指针。我尝试定义 some_struct *s 而不是 some_struct s,但没有运气。我试过:

这工作得很好(分配函数也需要更改),但根据分配我可能不会更改声明,它必须是 *arg .. 如果我只需要声明,那将是最正确的some_struct s.. 不是 some_struct *s。分配函数的目的是初始化一个结构体(a some_struct),其中也包括分配它。

还有一件事我忘了提。分配函数中的返回 0 是为某些状态消息保留的,因此我无法使用它返回地址。

0 投票
3 回答
226 浏览

c# - .NET 数据库查询没有分配?

我被赋予了重写一些用 C# 编写的库的任务,这样一旦启动完成就没有分配。

我刚做了一个项目,该项目每 30 秒通过 OdbcConnection 进行一些数据库查询。我一直只使用创建 OdbcDataReader 的 .ExecuteReader()。是否有任何模式(如 SocketAsyncEventArgs 套接字模式)可以让您重新使用自己的 OdbcDataReader?或者其他一些避免分配的聪明方法?

我没有费心去学习 LINQ,因为工作中的所有数据库都是基于 Oracle 的,而我最后一次检查时,没有官方的 Linq To Oracle 提供程序。但如果在 Linq 中有一种方法可以做到这一点,我可以使用第三方方法之一。

更新:

我认为我没有明确说明 no-alloc 要求的原因。我们有一个关键线程正在运行,它不会冻结非常重要。这是一个近乎实时的交易应用程序,我们确实看到某些 Gen 2 集合的冻结时间长达 100 毫秒。(我也听说过用 C# 以同样的方式编写游戏)。有一个后台线程会进行一些合规性检查,每 30 秒运行一次。它现在进行数据库查询。查询非常慢(返回所有数据大约需要 500 毫秒),但这没关系,因为它不会干扰关键线程。除非工作线程正在分配内存,否则会导致 GC 冻结所有线程。

有人告诉我,所有库(包括这个库)在启动后都无法分配内存。无论我是否同意,这都是签署支票的人的要求:)。

现在,显然有一些方法可以让我在没有分配的情况下将数据放入这个过程。我可以设置另一个进程并使用套接字将其连接到这个进程。使用新的 SocketAsyncEventArgs 模式,新的 .NET 3.5 套接字经过专门优化,根本不分配。(事实上​​,我们使用它们来连接多个系统,并且从未看到来自它们的任何 GC。)然后有一个从套接字读取并遍历数据的预分配字节数组,沿途不分配任何字符串。(我不熟悉 .NET 中其他形式的 IPC,所以我不确定内存映射文件和命名管道是否分配)。

但是,如果有一种更快的方法来完成这个 no-alloc 查询而无需经历所有的麻烦,我会更喜欢它。

0 投票
1 回答
1612 浏览

sqlite - NSString alloc:initWithCString 与 stringWithUTF8String 有什么区别?

我认为这两种方法是(内存分配方式)等效的,但是,如果我使用我认为方便的方法(在下面注释掉)并且当我切换时,我会在调试器中看到“超出范围”和“NSCFString”对于更明确的方法,我的代码停止崩溃!请注意,我从 sqlite3 查询中获取了存储在容器中的字符串。

另请注意,如果我查看调试器中的值并使用 NSLog 打印它们,它们看起来是正确的,但是,我认为没有分配新内存并复制了值。相反,内存指针被存储-超出范围-稍后引用-崩溃!

0 投票
12 回答
260923 浏览

c++ - C++ 中的静态数组与动态数组

C++中的静态数组和动态数组有什么区别?

我必须为我的班级做一个作业,它说不要使用静态数组,只能使用动态数组。我在书上和网上都看过,但我似乎不明白。

我认为静态是在编译时创建的,而动态是在运行时创建的,但我可能将其误认为是内存分配。

你能解释一下C++中静态数组和动态数组的区别吗?

0 投票
4 回答
1353 浏览

c# - C# 内存分配

  • 在 c# 中使用 operator new 是否可能会失败(例如,如果它需要大内存)?-解决了-
  • 以及如何发现它?-解决了-
  • 新操作员可能会抛出哪些其他故障?

谢谢

0 投票
3 回答
430 浏览

c++ - 动态创建的数组

我的任务包括两部分。首先,我必须创建 100 个元素的全局字符数组,并使用 cin 向其中插入一些文本。然后计算字符数量,并根据输入文本的长度创建专用数组。我正在考虑以下解决方案:

我想好了吗?

任务的第二部分是在第一个程序中引入动态创建的指向所有插入单词的指针数组。添加一个新单词应该打印所有以前的单词,如果没有空间用于下一个单词,则 inputData 数组的大小应该增加两倍。老实说,这对我来说有点过分了。我如何专门创建指向单词的指针?以及如何在不丢失其内容的情况下增加全局数组的大小?有一些临时数组?

0 投票
8 回答
11130 浏览

c++ - 在 C++ 中释放指针两次或更多次时会发生什么?

0 投票
1 回答
3742 浏览

c++ - HeapCreate,Linux 中的 HeapAlloc,Linux 的私有分配器

在 Windows 中,对于要求非常高的应用程序,程序员可以使用 HeapCreate、HeapAlloc 来更好地管理和控制内存分配——加速它(又名私有分配器)。Linux c++ 编程中的等价物是什么?

0 投票
3 回答
1216 浏览

c++ - C++ 中的动态堆栈分配

我想在堆栈上分配内存。

听说过 _alloca / alloca,我知道这些是编译器特定的东西,我不喜欢。

所以,我想出了我自己的解决方案(可能有它自己的缺陷),我希望你审查/改进它,这样一劳永逸地我们将让这段代码工作:

用VC9编译。

你从中看出什么缺陷?例如,我不确定从 ESP 中减去是否是“任何类型的 CPU”的解决方案。另外,我想让注释掉的宏工作,但由于某种原因我不能。

0 投票
5 回答
11575 浏览

c# - 如何在 C# 中使用动态分配创建类对象数组?

我做了一个名为 x 的类;所以我想使用动态分配来制作它的数组

但它给了我那个错误

无法将类型“ObjAssig4.x”隐式转换为“ObjAssig4.x[]”

我知道这是转储问题,但我是初学者

谢谢