问题标签 [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.
c++ - 在托管包装器中包装非托管 c++
我有一个非托管 C++ 库。我想公开 .NET 应用程序的功能。我不确定如何处理一个特定的功能:
typedef void (free_fn*) (void*); void put (void *data, free_fn deallocation_function);
这个想法是您将动态分配的缓冲区传递给函数并提供一个释放函数。库将异步处理数据,并在以后不再需要数据时释放缓冲区:
无效 *p = malloc (100); ... 填充缓冲区... put (p, free);
我怎样才能将这种东西暴露给 .NET 应用程序?
c++ - 为什么这个 C++ STL 分配器不分配?
我正在尝试编写一个派生自的自定义 STL 分配器std::allocator
,但不知何故所有调用都allocate()
转到基类。我已将其缩小到以下代码:
我期待“哟!” 打印出来,然后是一些可怕的错误,因为我实际上并没有分配任何东西。相反,该程序运行良好并且什么也不打印。我究竟做错了什么?
我在 gcc 和 VS2008 中得到相同的结果。
c - 声明大数组时出现堆栈溢出异常
以下代码为我生成堆栈溢出错误
我该如何解决这个问题?我正在使用 Turbo C++,但想将我的代码保留在 C 中
编辑:
感谢您的建议。上面的代码只是举例,我实际上在函数中声明了数组,而不是在 sub main 中。此外,我需要将数组初始化为零,所以当我搜索 malloc 时,我发现 calloc 非常适合我的目的。
Malloc/calloc 也比在堆栈上分配的优点是允许我使用变量声明大小。
objective-c - 如何分配动态类型对象
我在 Objective-c 中看到了很多关于动态类型的讨论。但我还没有看到任何我认为应该是的例子。
假设我有一个通用函数,它应该处理两个对象(一个被分配,另一个被释放)并且调用对象将它自己附加到新分配的对象。两者都继承自 class0
如果您认为它会解释某些内容,请随意解释它!
如果在运行时选择类,我如何处理参数列表(?现在是一个占位符)我如何分配一个直到运行时才定义类的对象?
c# - C#数据分配问题
我有以下问题。我有一个 C++ dll,包含函数
然后我有一个类的 C# dll
//函数Free()看起来像:
我从 C# 应用程序中将其称为
问题是,一段时间后,C# 应用程序因 SystemAccessViolationExcetpion 而崩溃。你知道问题出在哪里吗?
为了更清楚:C# aaplication 可以完成某些类型的输入,而其他类型的输入会崩溃,所以我不认为调用约定有问题,是吗?
c++ - std::allocator 构造/销毁与放置 new/p->~T()
对于我的一个项目,我正在从头开始编写一些 STL 容器(我有我的理由)。由于我如此密切地模仿 STL 的功能和接口,我正在尽我最大的努力遵守“如果它与标准构造具有相同名称,它将尽可能地符合标准”的策略。
所以,当然,我的容器将分配器作为模板参数,这非常好,因为它允许一些自定义分配方案。关于我的问题。
该std::allocator
接口将内存分配与对象构造分开。同样,它将释放与销毁分开。这是有道理的,因为从哪里获取内存与在 c++ 中正确构造对象或多或少无关。
因此,对于默认实现,有两个构造/释放函数看起来像这样(直接从书中提取):
如您所见,construct 只是调用placement new,而destroy 只是调用析构函数。
是否有任何理由使用这些而不是仅使用放置新和析构函数语法?“正确”的分配器可以以另一种方式实现这些吗?还是我保证所有符合标准的分配器实现都会以这种方式实现构造/销毁方法?
更重要的是,可以肯定地说我总是可以使用std::uninitialized_copy
andstd::uninitialized_fill
来构造容器的元素吗?
谢谢。
sql - 大表的 MSSQL 游标无法分配空间
我们正在尝试设置一个游标来运行从同一个巨大表的两个“实例”之间的连接生成的记录(超过 150 M 记录)。
出现以下异常消息:
无法为数据库“tempdb”中的对象“dbo.SORT 临时运行存储:165282123350016”分配空间,因为“PRIMARY”文件组已满。通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。
你们有谁知道这其中的原因吗?或者如何使下面的查询更有效率?
我发现它发生在DECLARE CURSOR
和第一个之间的某个地方FETCH NEXT
,但我还不知道它是否介于...
DECLARE CURSOR
和OPEN
或之间
OPEN
和第一个FETCH NEXT
。
更多细节: sql 语句如下所示:
我收到的最后一条日志消息是“A”,然后一小时后它失败并显示上述消息,从未达到“C”。我现在正在尝试在“B”点记录。
根据要求,我发布了确切的 sql 表达式:
在 Quassnoi 更新答案后,我还将原始索引发布在桌子上:
我在此表上有一个非聚集索引,其中包含iBatchNumber
、sFieldName
、sTableName
、列iRowIndex
。该索引sFieldValue
作为包含列。
正如 Quassnoi 建议的那样(我想我现在明白为什么了)我已经更改了索引以使列按以下顺序排列:iBatchNumber
, sTableName
, iRowIndex
, sFieldName
。我sFieldValue
用作包含的列。执行计划不再包含任何内容SORT
,并且执行计划中的步骤数不到原来的一半,我希望这也更快......
c++ - 在 Windows 上测量内存分配有哪些好工具?
我有一个应用程序随着时间的流逝(在积极运行时)不断消耗越来越多的内存,但没有泄漏。所以我知道该程序并没有做完全错误的事情,这很容易找到。
相反,我想跟踪分配,以便我可以开始跟踪问题,在 Mac 上我会使用 Instruments,它提供了分配哪些对象以及由谁分配的详细配置文件,但在 Windows 上我会使用什么?
目前我正在使用 VS2005 在 Windows XP 上使用 C/C++。因此,任何用于此设置的工具都会很棒,希望免费或至少提供几周试用的工具,因为如果需要,完成任何购买(公司产品)需要一段时间,而且我有最后期限。
谢谢!
编辑:我正在使用 VLD,所以我知道程序没有泄漏,但它似乎占用了比需要更多的内存,并且没有返回它,所以我需要跟踪分配,而不是泄漏。
c++ - C++ 'new' 运算符的问题?
我最近遇到了这种咆哮。
文章中提到的几点我不是很明白:
- 作者提到了
delete
vs的小烦恼delete[]
,但似乎认为它实际上是必要的(对于编译器),但从未提供过解决方案。我错过了什么? 在“专用分配器”部分的功能
/li>f()
中,似乎可以通过将分配替换为以下内容来解决问题:(省略对齐)在“重载 ::operator new[] 的危险”中,作者试图做一个
/li>new(p) obj[10]
. 为什么不这样做(远不那么模棱两可):'调试 C++ 中的内存分配'。不能在这里争论。
整篇文章似乎都围绕在自定义内存管理方案中具有重要 构造函数和析构函数的类展开。虽然这可能很有用,而且我无法反驳,但它的共性非常有限。
基本上,我们有放置新的和按类分配器——这些方法不能解决哪些问题?
另外,如果我只是笨拙和疯狂,在你理想的 C++ 中,什么会代替operator new
?必要时发明语法——什么是理想的,只是为了帮助我更好地理解这些问题。
c - 是否有另一种方法可以在 C 中释放动态分配的内存 - 不使用 free() 函数?
我正在为考试而学习,我想知道这些是否等同于 free(ptr):
据我了解,这些都不起作用,因为 free() 函数实际上告诉 C ptr 之后的内存再次可供它使用。抱歉,这是一个菜鸟问题,但我们将不胜感激。