allocation相关内容

Linux 分配器不释放小块内存

Linux glibc 分配器的行为似乎很奇怪.希望有人可以对此有所了解.这是我拥有的源文件: first.cpp: #include #include #include #include int main() {std::list指针;for(size_t i = 0; i 第二个.cpp: #include #include #include int main() {字符** p ..
发布时间:2021-11-27 08:08:37 C/C++开发

为什么编译器在堆栈中分配的比需要的多?

我有一个简单的 C 程序.比方说,例如,我有一个 int 和一个长度为 20 的 char 数组.我总共需要 24 个字节. int main(){字符缓冲区[20];整数 x = 0;缓冲区[0] = 'a';缓冲区[19] = 'a';} 堆栈需要与 16 字节边界对齐,因此我假设编译器将保留 32 字节.但是当我用 gcc x86-64 编译这样的程序并读取输出程序集时,编译器保留了 6 ..
发布时间:2021-11-27 08:08:30 其他开发

确定 C 中动态分配内存的大小

C 中有没有办法找出动态分配的内存大小? 例如之后 char* p = malloc (100); 有没有办法找出与p相关的内存大小? 解决方案 comp.lang.c FAQlist · 问题 7.27 - 问.那么我可以查询 malloc 包以找出分配的块有多大吗? A.不幸的是,没有标准或便携的方式.(一些编译器提供非标准的扩展.)如果你需要知道,你必须自己跟踪 ..
发布时间:2021-11-27 08:08:22 其他开发

为什么使用 alloca() 不被认为是好的做法?

alloca() 在堆栈上而不是在堆上分配内存,就像 malloc() 的情况一样.因此,当我从例程返回时,内存被释放.所以,实际上这解决了我释放动态分配内存的问题.释放通过 malloc() 分配的内存是一个令人头疼的问题,如果以某种方式错过会导致各种内存问题. 尽管具有上述特性,为什么不鼓励使用 alloca()? 解决方案 答案就在 man 页面(至少在 Linux): ..
发布时间:2021-11-27 08:08:12 其他开发

在函数C中分配内存二维数组

如何在函数中为二维数组分配动态内存?我试过这种方式: int main(){int m=4,n=3;int** arr;分配内存(&arr,n,m);}无效分配内存(int*** arr,int n,int m){*arr=(int**)malloc(n*sizeof(int*));for(int i=0;i ..
发布时间:2021-11-24 21:10:05 C#

fortran,将可分配数组传递给具有右边界的子例程

我需要在程序中将一些可分配的数组传递给子例程,我需要知道我这样做的方式是否符合标准. 如果你知道我在哪里可以搜索到fortran的标准,请告诉我. 这是一段比文字更能说明问题的小代码 程序测试使用 modt99隐式无实数(pr), 维度(:), 可分配:: vx分配(vx(-1:6))vx=(/666,214,558,332,-521,-999,120,55/)调用 test3(vx ..
发布时间:2021-11-18 04:09:34 其他开发

堆上的 C++ 多维数组

我将如何动态分配多维数组? 解决方案 如果你已经知道嵌套维度的大小,你也可以直接使用 new 分配一个多维数组: typedef int尺寸[3][4];尺寸 * 暗 = 新尺寸 [10];dim[/* 从 0 到 9 */][/* 从 0 到 2 */][/* 从 0 到 3 */] = 42;删除 [] 暗淡; 代替 10,可以传递运行时确定的值.因为它不是类型运算符 new 返回 ..
发布时间:2021-11-18 04:01:22 C/C++开发

二维数组C++的动态分配

嗨,我是 C++ 的新手,我需要动态分配二维数组.没有错误,但在运行时,当我设置订单和第一行时,我收到一个运行时错误:“分段错误"...这是代码: #include 使用命名空间标准;双**分配动态数组(int &order){double ** arr = new double *[order];for(int i = 0;i ..
发布时间:2021-11-18 03:48:22 C/C++开发

C中动态分配数组的数组

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

分配二维数组的怪异方法?

在一个项目中,有人推动了这条线: double (*e)[n+1] = malloc((n+1) * sizeof(*e)); 据说创建了一个 (n+1)*(n+1) 双精度的二维数组. 据说,我说,因为到目前为止,我问过的任何人都不能告诉我这究竟是做什么的,也没有告诉我它来自哪里或为什么它应该起作用(据称,它确实如此,但我还没买). 也许我遗漏了一些明显的东西,但如果有人能向我解 ..
发布时间:2021-11-18 02:04:50 其他开发

在堆栈上声明大数组

我正在使用 Dev C++ 编写一个模拟程序.为此,我需要声明一个数据类型为 double 的一维数组.它包含 4200000 元素 - 比如 double n[4200000]. 编译器没有显示错误,但程序在执行时退出.我已经检查过,对于具有 5000 元素的数组,程序执行得很好. 现在,我知道不建议在堆栈上声明如此大的数组.但是,问题是模拟需要我多次调用数组中的特定元素 - 例如, ..
发布时间:2021-11-18 01:56:01 C/C++开发

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

C++ 中的静态数组和动态数组有什么区别? 我必须为我的班级做一个作业,它说不要使用静态数组,只能使用动态数组.我在书上和网上看过,但我似乎不明白. 我认为静态是在编译时创建的,而动态是在运行时创建的,但我可能将其误认为是内存分配. 你能解释一下 C++ 中静态数组和动态数组的区别吗? 解决方案 局部数组是在栈上创建的,并且有自动存储时长——你不需要手动管理内存,但是当函 ..
发布时间:2021-11-18 01:02:36 C/C++开发

声明大数组时出现堆栈溢出异常

以下代码为我生成了堆栈溢出错误 int main(int argc, char* argv[]){int筛[2000000];返回0;} 我该如何解决这个问题?我正在使用 Turbo C++,但希望将我的代码保留在 C 中 编辑: 谢谢你的建议.上面的代码只是举例,我实际上在函数中而不是在 sub main 中声明了数组.此外,我需要将数组初始化为零,所以当我在谷歌上搜索 mall ..
发布时间:2021-11-18 00:53:04 其他开发

写入时c6386缓冲区溢出

函数名称:expandStack 输入:指向堆栈类型(Stack *)的指针 输出:无 函数操作:该函数扩展堆栈 void expandStack(Stack * stack){//检查堆栈和数组是否已分配if(堆栈== NULL ||堆栈->内容== NULL){返回;}//分配一个新的大小数组(前一个* 2)Element * ExpandedStack =(Element *) ..
发布时间:2021-04-03 18:34:13 其他开发

为什么alloca两次返回相同的地址?

我正在尝试实现自己的数学库,并且从向量开始.想法是给该类一个指向数字数组的指针,然后复制该数组并将其存储在私有变量指针给定的数据地址中.首先,我使用 alloca 尝试为私有变量释放一些内存 vml.h namespace vml {//向量模板vec类{民众:vec(in_type * in_data){st ..
发布时间:2021-04-03 18:34:10 C/C++开发