dynamic-memory-allocation相关内容

CUDA 新删除

如果从 CUDA 4.2 中的 __device__ 或 __global__ 代码调用 new 和 delete 关键字的行为,有人能给出清楚的解释吗? 内存在哪里分配,如果它在设备上是本地的还是全局的? 我试图在 GPU 上创建神经网络的问题的上下文,我想要一个链接表示(就像一个链接列表,但每个神经元都存储一个链接的链接列表,其中包含权重和指向另一个的指针神经元),我知道我可以在内 ..
发布时间:2022-01-10 15:29:04 其他开发

为什么 malloc() 可以互换调用 mmap() 和 brk()?

我是 C 和堆内存的新手,仍在努力理解动态内存分配. 跟踪Linux系统调用,发现如果使用malloc请求少量堆内存,则malloc在内部调用brk. 但是如果我使用 malloc 来请求非常大的堆内存,那么 malloc 会在内部调用 mmap. 所以brk和mmap肯定有很大的区别,但是理论上我们应该可以使用brk来分配堆内存,不管请求的大小.那么为什么malloc在分配大量 ..

C++ 中的高效链表?

这个文档说std::list效率低下: std::list 是一个非常低效的类,很少有用.它为插入其中的每个元素执行堆分配,因此具有极高的常数因子,特别是对于小数据类型. 评论:这让我很惊讶.std::list 是一个双向链表,所以尽管其元素构造效率低下,但它支持 O(1) 时间复杂度的插入/删除,但在此引用的段落中完全忽略了该特性. 我的问题:假设我需要一个 sequentia ..

在 MS Visual Studio 2013 中,我可以使用什么来代替 std::aligned_alloc?

我想使用 C++11 的 std::aligned_alloc,但不幸的是它不适用于 Microsoft Visual Studio 2013. 我正在考虑,intsead,自己实现 aligned_alloc.一个实现应该是什么样的?以下示例无法编译,因为它无法从 void* 转换为 void*&. 模板T*aligned_alloc(std::size_t 大小,std::size_ ..

realloc() 的正确使用

来自 man realloc:realloc() 函数返回一个指向新分配内存的指针,该指针适合任何类型的变量对齐,可能 与 ptr 不同,如果请求失败,则为 NULL. 所以在这个代码片段中: ptr = (int *) malloc(sizeof(int));ptr1 = (int *) realloc(ptr, count * sizeof(int));if(ptr1 == NULL) ..
发布时间:2021-12-30 23:38:09 其他开发

动态结构数组的 GPU 内存分配

我在将结构数组传递给 GPU 内核时遇到问题.我基于这个主题 - cudaMemcpy 分段错误,我这样写: #include #include 结构测试{字符*数组;};__global__ void 内核(测试 *dev_test){for(int i=0; i 没有错误,但是内核中显示的值不正确.我做错了什么?在此先感谢您的帮助. 解决方案 这是分配一个新的指向主机内存的指 ..
发布时间:2021-12-23 17:14:18 其他开发

如何在C中读取无限字符

如何在不指定大小的情况下将无限个字符读入 char* 变量? 例如,假设我想读取也可能需要多行的员工的地址. 解决方案 您必须先“猜测"您期望的大小,然后使用 malloc 分配一个那么大的缓冲区.如果结果太小,您可以使用 realloc 将缓冲区的大小调整为更大一些.示例代码: char *buffer;size_t num_read;size_t 缓冲区大小;缓冲区大小 = 1 ..
发布时间:2021-12-21 18:03:50 其他开发

2D & 的动态分配/解除分配3D阵列

我知道动态分配/取消分配 2D 数组的算法,但是对于 3D 数组我不太确定. 使用这些知识和一点对称性,我想出了以下代码. (我在编码期间很难在 3D 中进行可视化). 请评论正确性并建议任何更好的替代方案(效率方面或直觉上),如果有的话. 另外,我认为这些 2D 和 3D 数组都可以像 arr2D[2][3] 和 这样的静态数组一样正常访问arr3D[2][3][2].对? ..

动态内存访问仅在函数内部有效

此问题旨在用作此常见问题解答的规范副本: 我在函数内部动态分配数据,一切正常,但仅限于发生分配的函数内部.当我尝试在函数外使用相同的数据时,我会遇到崩溃或其他意外的程序行为. 这是一个MCVE: #include #include void create_array (int* data, int size){数据 = malloc(sizeof(*data) * size);for ..

在 C++ 中创建动态对象的动态数组

我知道如何创建动态对象数组. 例如,类名是 Stock. 股票 *stockArray[4];for(int i = 0 ; i 如何将其更改为动态对象的动态数组? 我尝试了什么: Stock stockArrayPointer = new Stock stock[4]; 它不起作用,错误是“Stock** 的值不能用于初始化 Stock 类型的实体. 第二个问 ..
发布时间:2021-11-18 05:14:27 C/C++开发

C:向动态分配的数组添加元素

我试图通过谷歌搜索解决方案:我找不到任何有用的东西;甚至似乎我这样做是正确的.我能找到的关于通过一个函数发送我动态分配的数组的唯一页面,该函数处理位于结构内的数组,当然这是标量,因此行为不同.我现在不想使用结构——我正在尝试了解 DAM 并使用指针和函数. 也就是说,我确定这是非常初级的,但我被卡住了.代码可以编译,但是当我运行可执行文件时它会冻结.(我正在使用 minGW gcc,如果这很 ..
发布时间:2021-11-18 03:47:38 其他开发

动态分配用户输入的字符串

我正在尝试编写一个执行以下操作的函数: 开始一个输入循环,打印'>' 每次迭代. 获取用户输入的任何内容(未知长度)并将其读入字符数组,必要时动态分配数组的大小.用户输入的行将以换行符结束. 在字符数组的末尾添加一个空字节 '\0'. 当用户输入空行时循环终止:'\n' 这是我目前写的: void input_loop(){字符 *str = NULL;printf(">"); ..
发布时间:2021-11-18 03:14:29 其他开发

ALLOCATABLE 数组还是 POINTER 数组?

我正在用 Fortran 编写新代码,但在使用可分配数组或指针数组之间犹豫不决.我在某处读到可分配数组比指针数组有显着优势: 1) 效率更高,因为它们在内存中总是连续的 2) 不可能出现内存泄漏 有人可以确认吗?您建议使用哪一种?这两种方案在代码执行速度方面的结果如何? 解决方案 可分配数组可以产生更高效的代码,因为数组将是连续的.特别是如果数组传递给子例程,连续可以防止 ..

对数组使用动态内存分配

我应该如何为数组使用动态内存分配? 例如,这里是以下数组,我从 .txt 文件中读取单个单词并将它们逐字保存在数组中: 代码: char words[1000][15]; 这里 1000 定义了数组可以保存的单词数,每个单词不能超过 15 个字符. 现在我希望该程序应该为它计数的字数动态分配内存.例如,一个 .txt 文件可能包含大于 1000 的单词.现在我希望程序应该计算 ..
发布时间:2021-11-18 02:31:00 其他开发

C中动态分配数组的数组

我并不真正了解 C 中的一些基本内容,例如动态分配数组数组.我知道你可以做到: int **m; 为了声明一个二维数组(随后将使用一些 *alloc 函数进行分配).也可以通过执行 *(*(m + line) + column) 来“轻松"访问它.但是我应该如何为该数组中的元素赋值?使用 gcc 以下语句 m[line][column] = 12; 因分段错误而失败. 任何文章/文档将不 ..
发布时间:2021-11-18 02:26:56 其他开发

C中未知矩阵的动态分配

我需要将用户输入的文件乘以另一个文件.我知道该怎么做. 问题是一个文件是一个数组,另一个是一个矩阵. 我需要扫描矩阵的第一行以找到矩阵的大小,然后我需要从文件中动态分配矩阵和数组. 这是我目前所拥有的: #include #include #include #include int main(){int row1, col1;//这些值需要从第一个文件中拉取// ..