问题标签 [memory-reallocation]

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 投票
1 回答
266 浏览

cuda - CUDA - 在内核中动态重新分配更多全局内存

我对以下任务有疑问:

“给定一个二维数组“a[N][M]”,所以 N 行长度为 M。数组的每个元素包含一个 0 到 16 之间的随机整数值。写一个内核“compact(int *a, int * listM, int *listN)" 只包含一个N 个线程块,每个线程计算数组的一行有多少元素的值为 16。

线程将这些数字写入共享内存中长度为 N 的数组“num”,然后(在屏障之后)其中一个线程执行下面列出的前缀代码“PrefixSum(int *num, int N)”(在代码中下面我解释一下这段代码的作用)。最后(再次障碍),每个线程“Idx”将其行中值为 16 的元素的 N 值和 M 值,分别位置(或“x 和 y 坐标”)写入两个数组中“全局内存中的 listM" 和 "listN",从这些数组中的位置 "num[Idx]" 开始。为了更容易实现这最后一个任务,有上面提到的前缀代码。”

我已经编写了一个内核和一个合适的 main 来测试它。但是,我仍然有一个我无法解决的问题。

在两个数组“listeM”和“listeN”中,应该存储出现在数组“a[M][N]”中的每个 16 的单独位置。因此,它们的大小必须等于 16 的出现总数,这可能会有所不同。

由于您不知道值为 16 的元素的确切数量,因此您只能在内核运行时知道两个数组“listeM”和“listeN”需要多少内存。当然,您可以在程序启动时为最大可能数量释放足够的内存,即 N 乘以 M,但这将非常低效。是否可以编写内核,以便每个线程在计算其行中值为 16 的元素数量(仅此数字)之后动态扩大两个数组“listeM”和“listeN”?

这是我的内核:

0 投票
1 回答
422 浏览

c++ - 使用 memcpy 和 memset 重新分配数组

我已经接管了一些代码,并遇到了一个奇怪的数组重新分配。这是 Array 类中的一个函数(由 JsonValue 使用)

我明白了这一点;它只是分配一个新数组,并将旧数组中的内存内容复制到新数组中,然后将旧数组的内容归零。我也知道这样做是为了防止调用析构函数和移动。

JsonValue是一个具有函数的类,以及一些存储在联合中的数据(字符串、数组、数字等)。

我担心的是这是否是实际定义的行为。我知道它有效,并且自从我们几个月前开始使用它以来就没有出现过问题;但如果它未定义,则并不意味着它会继续工作。

编辑: JsonValue看起来像这样:

where是sArray数组的包装器, is a ,is ,是, 和 的并集,包含它所持有的值的类型。所有值的开头都有 16 位未使用的数据,用于. 例子:JsonValueStringchar*EmbedStringchar[14]Numberintunsigned intdoubleDetailsDetails

0 投票
2 回答
52 浏览

c - 使用指向结构和结构指针的双指针重新分配动态二维数组

我问了一个关于结构内动态指针的分配和重新分配的问题。但现在我在一个结构中有一个双指针组件。

我想在添加顶点后重新分配图的邻接矩阵。

双指针的重新分配有效,但是当我想在循环中重新分配指针(双指针指向的指针)时,程序在第一个循环运行时停止并出现分段错误......

这是我的想法(画在油漆中......) myIdea

为了更好的可读性,我划分了我的代码

这是代码第 1 部分:

第 2 部分与 updateAdjMat () 中的重新分配问题:

第 3 部分与工作代码:

在我的 Main 中,我只有一个菜单,通过调用 addVertex 添加具有名称和 x、y 坐标的新顶点

0 投票
2 回答
65 浏览

c++ - 通过字符串计算长度需要更长的时间,而不是移动字符串几次?

我写了以下两个函数。在第二个函数中,我使用reserve()了所以没有内存重新分配,但不幸的是第二个函数比第一个慢。

我在 Visual Studio 中使用了发布模式和这个 CPU 分析器来计算时间。在第二个函数中,重新分配发生了 33 次。所以我的问题是:真的吗?将一个长度的字符串计算长度需要更长的时间,而不是移动这个字符串 33 次?

0 投票
2 回答
478 浏览

c - 动态内存分配中的分段错误(核心转储)错误

我是编码新手,也是 C++ 新手。我正在尝试编写一个输入矩阵元素的代码。之后,应删除一列,并添加一行。删除一列工作正常。但是,在为新的行数重新分配内存后,我收到消息:分段错误(核心转储)。我正在使用指针来创建和编辑我的矩阵。这是我的代码。谢谢你的帮助!

0 投票
1 回答
57 浏览

c - 重新分配后访问数组位置的分段错误

假设我有这个功能:

注意:我是一名学生,这是老师给出的有效解决方案。

现在,我可以使这项工作的唯一方法是这样的:

据说第一个(老师的)是正确的,第二个(我的)不是因为我做了不需要的额外步骤。

我想知道为什么它会引发分段错误,是应该这样做还是函数写得好?

0 投票
1 回答
385 浏览

java - 下面这段代码的时间复杂度是多少

在这个 java 代码中,我们交换了两个数组,在这种情况下,只有数组的内存引用正在改变,或者 A 和 B 之间的元素交换?时间复杂度为 O(1) 或 O(m+n),其中 m 和 n 分别是数组 A 和 B 的大小。这段代码是在 leetcode https://leetcode.com/articles/median-of-two-sorted-arrays/上找到的

0 投票
1 回答
335 浏览

c++ - Vulkan/VMA 更改缓冲区大小类似于`realloc`

假设我遇到了一种情况,我想更改 vulkan 缓冲区 (VkBuffer) 的大小。例如,如果我想向现有的顶点缓冲区添加更多顶点。我将如何增大/缩小 VkBuffer?我会被迫只创建一个新缓冲区并放弃旧缓冲区,还是有类似于 C 的功能realloc?它是否以 vulkan 扩展的形式存在?

此外,我正在使用 Vulkan 内存分配器 (VMA)。如果有这样的realloc功能,我想要使用 VMA 和原始 vulkan 的两种解决方案。

0 投票
1 回答
54 浏览

c - 如何在运行时动态增加任何结构对象的大小?

我是 C 语言的初学者。我正在尝试在输入通过时动态重新分配内存的任务(尽管对于这个测试我正在做一个正常的任务,稍后会尝试扩大它)。我面临的问题是我在写入内存时无法访问内存。谁能帮我理解这段代码哪里出错了。提前致谢。

代码:

0 投票
2 回答
68 浏览

c - 为什么 realloc 给了我不一致的行为?

我目前正在我的学校学习程序编程课程。我们使用 C 和 C99 标准。我和我的导师讨论过这个问题,我不明白为什么realloc()他的机器可以工作,但我的机器不行。

该程序的目标是解析students.txt具有学生姓名和 GPA 格式的文本文件,格式如下:

我有一个函数可以调整动态分配的数组的大小,当我在 CLion IDE 中使用 realloc 调试器时,它给了我 SIGABRT。

我尝试使用在线编译器并得到realloc(): invalid next size.

我整个周末都在尝试调试这个,我找不到答案,我需要帮助。

我的代码目前看起来像这样