相关疑难解决方法(0)

动态分配内存

让我们考虑以下两个代码

第一:

for (int i=0;i<10000000;i++)
{
    char* tab = new char[500];
    delete[] tab;
}
Run Code Online (Sandbox Code Playgroud)

第二:

for (int i=0;i<10000000;i++)
{
    char tab[500];
}
Run Code Online (Sandbox Code Playgroud)

峰值内存使用率几乎相同,但第二个代码运行速度比第一个快20倍.

问题
是因为第一个代码数组存储在堆上,而第二个数组存储在堆栈中?

c++ memory-management dynamic

5
推荐指数
1
解决办法
452
查看次数

测试malloc何时返回NULL

我试图strdup在C中复制这个功能.这是学校练习的一部分.我想单元测试,其中包括情况下malloc返回NULL,并设置errnoENOMEM.

我在OSX 10.8上.

我已经尝试限制stacksize,然后datasize,在堆上实现malloc分配:

limit stacksize 0
limit datasize 0
Run Code Online (Sandbox Code Playgroud)

确认限制应该有效:

my-host% limit
cputime         unlimited
filesize        unlimited
datasize        0kB
stacksize       0kB
coredumpsize    0kB
addressspace    unlimited
memorylocked    unlimited
maxproc         709
descriptors     256
Run Code Online (Sandbox Code Playgroud)

但是,即使堆栈大小限制为0kB,我也可以正常运行程序.所以我认为我的主机可能对最小堆栈大小有限制.

我怎么能测试malloc返回的情况NULL呢?

c macos unit-testing

5
推荐指数
1
解决办法
708
查看次数

Object var和Object*var = new Object()之间的区别

如果我有一个名为Object的类,那么创建一个实例之间的区别是什么:

Object var;
Run Code Online (Sandbox Code Playgroud)

和:

Object* var = new Object();
Run Code Online (Sandbox Code Playgroud)

c++

4
推荐指数
3
解决办法
608
查看次数

堆栈由编译器或OS /体系结构创建

这个问题是我上一个问题的后续问题

堆栈增长方向

我想知道堆栈是由编译器还是OS /架构创建的?OS如何知道这些编译器特定的东西?例如:C++允许变量在堆栈和堆上创建数据,而java只允许堆.

此外,如果在堆上创建堆栈,如帖子中所述,系统如何知道它,因为系统只知道堆栈指针和基指针.

c java compiler-construction operating-system

4
推荐指数
1
解决办法
377
查看次数

在分配staticaly一个int数组时的Segfault

如果我这样做

int wsIdx [length];

我有一个segFault

但如果我这样做

int *wsIdx;
wsIdx = (int *)malloc(sizeof(int) * length );
Run Code Online (Sandbox Code Playgroud)

这里没有问题.

只有在我的测试期间长度很高,2560000时才会出现此问题.我有足够的记忆力.你能解释一下这两种分配方法之间的区别,以及为什么第一种方法不起作用?谢谢.

c malloc

4
推荐指数
1
解决办法
129
查看次数

malloc的以下代码行是什么?

我有以下实现来镜像二叉树.

#include<stdio.h>
#include<stdlib.h>

/* A binary tree node has data, pointer to left child
   and a pointer to right child */
struct node
{
    int data;
    struct node* left;
    struct node* right;
};

/* Helper function that allocates a new node with the
   given data and NULL left and right pointers. */
struct node* newNode(int data)

{
  struct node* node = (struct node*)
                       malloc(sizeof(struct node));
  node->data = data;
  node->left = NULL;
  node->right = NULL;

  return(node);
}


/* Change a tree …
Run Code Online (Sandbox Code Playgroud)

c malloc pointers sizeof

4
推荐指数
1
解决办法
2万
查看次数

是否可以在不使用malloc的情况下进行内存泄漏?

这个问题如标题所示:是否有可能在不使用任何内核特定方法(如malloc,new等)的情况下产生内存泄漏?

如果我在一个包含很多元素的函数内部创建一个链表怎么办,之后我会退出这个函数而不清理列表.该列表将在不使用任何malloc调用的情况下创建,即

struct list_head {
     struct list_head *next, *prev;
}
Run Code Online (Sandbox Code Playgroud)

可以保证在退出此功能后将释放所有资源吗?所以我可以自由地执行它一百万次,什么都不会被泄露?

主题:如果您不使用任何特定的malloc或新调用,则不会出现堆内存泄漏.决不.是对的吗?

c c++ memory memory-leaks memory-management

4
推荐指数
1
解决办法
3454
查看次数

使用线程时的内存管理

1)我尝试搜索当我们在程序中使用线程但是找不到答案时如何分配内存.这里堆栈和堆的内容和位置是什么?是调用单个程序时堆栈和堆的工作方式.但是当涉及到线程编程时会发生什么?

2)使用OpenMP并行区域创建线程,并行代码将在每个线程中并发执行.这是否在内存中分配的空间比顺序执行的相同代码占用的内存多?

heap stack multithreading memory-management openmp

4
推荐指数
1
解决办法
3544
查看次数

存储C#的静态类内存分配

我读了一篇让我对内存分配感到困惑的文章,其中说:

Singleton对象存储在堆上,而静态类存储在堆栈中.

链接是:http: //www.dotnetjalps.com/2013/06/Static-vs-Singleton-in-Csharp-Difference-between-Singleton-and-Static.html

但在一些Stackoverflow问题中,例如

如何为静态变量分配内存?

它被描述为

静态变量存储在堆上,无论它们是声明为引用类型还是值类型.无论创建多少个实例,总共只有一个插槽.

所以我对静态类的堆栈或堆存储感到困惑.如何为静态类分配内存?为什么?如何为单例类分配内存?

c# memory-management

4
推荐指数
3
解决办法
2万
查看次数

可靠性:内存与堆栈

Solidity有3种不同的内存存储:存储、内存和堆栈。网上看了很多文章,还是不明白内存和栈的区别。我的问题是:

Q1. 内存和堆栈有什么区别?

Q2。假设我在函数中定义了一个局部变量,我怎么知道这个变量是存储在内存中还是栈中呢?(只有当变量声明带有“memory”关键字时,变量才在内存中?)

感谢大家。


感谢@Yilmaz 的回复。根据你的回答,假设我们有一个这样写的函数:

function test() public {
    string memory str;
    int i;
}
Run Code Online (Sandbox Code Playgroud)

str是否i同时在“内存”和“堆栈”上?

我的第三个问题是:

Q3。为什么只有数组、结构体和映射类型需要指定内存位置?为什么 Solidity 不允许我写int memory i;上面的代码?

storage blockchain ethereum solidity smartcontracts

4
推荐指数
1
解决办法
1542
查看次数