相关疑难解决方法(0)

堆栈和堆的内容和位置是什么?

编程语言书籍解释了在堆栈上创建了值类型,并且在堆上创建了引用类型,而没有解释这两者是什么.我还没有看清楚这个问题.我理解堆栈是什么.但,

  • 它们在哪里和它们(物理上在真实计算机的记忆中)?
  • 它们在多大程度上受操作系统或语言运行时控制?
  • 它们的范围是什么?
  • 是什么决定了它们的大小?
  • 是什么让一个更快?

language-agnostic heap stack memory-management dynamic-memory-allocation

7847
推荐指数
27
解决办法
145万
查看次数

在什么情况下我使用malloc vs new?

我在C++中看到有多种方式来分配和释放数据,我知道当你打电话给malloc你时应该打电话free,当你使用new操作员时你应该配对,delete将两者混合是错误的(例如,调用free()创建的东西)与new操作员),但我不知道何时应该使用malloc/ free何时应该在我的真实世界程序中使用new/ delete.

如果您是C++专家,请告诉我您在此方面遵循的任何经验法则或惯例.

c++ malloc memory-management new-operator

447
推荐指数
12
解决办法
26万
查看次数

Malloc vs new - 不同的填充

我正在审查其他人使用MPI进行高性能计算(10 ^ 5 - 10 ^ 6核心)的项目的C++代码.该代码旨在允许不同体系结构上(可能)不同机器之间的通信.他写了一条评论,说的是:

我们通常使用newdelete,但在这里我正在使用mallocfree.这是必要的,因为一些编译器在new使用时将以不同方式填充数据,从而导致在不同平台之间传输数据时出错.这不会发生malloc.

这与我从标准newvs malloc问题中所知道的任何内容都不符合.

new/delete和malloc/free有什么区别?提示编译器可以不同地计算对象的大小(但那么为什么它与使用不同sizeof?).

malloc&placement new vs. new是一个相当受欢迎的问题,但只讨论new使用构造函数而malloc不是,这与此无关.

malloc如何理解对齐?他说保证记忆与任何一个new或者malloc我之前想过的一致.

我的猜测是,他在过去的某个时间误诊了自己的错误并推断出newmalloc提供不同数量的填充,我认为这可能不是真的.但我无法通过谷歌或以前的任何问题找到答案.

帮助我,StackOverflow,你是我唯一的希望!

c++ malloc padding new-operator

108
推荐指数
2
解决办法
6182
查看次数

C++中"new"和"malloc"和"calloc"有什么区别?

"new"和"malloc"和"calloc"和其他家庭有什么区别?

(何时)除了"新"之外我还需要什么?

其中一个是否使用其他任何一个实现?

c++ heap malloc memory-management

51
推荐指数
5
解决办法
9万
查看次数

C++:删除与免费和性能

  1. 考虑:

    char *p=NULL;
    free(p) // or
    delete p;
    
    Run Code Online (Sandbox Code Playgroud)

    如果我使用freedelete开启会发生什么p

  2. 如果程序需要很长时间才能执行,比如10分钟,有没有办法将其运行时间减少到5分钟?

c++ performance pointers

26
推荐指数
3
解决办法
7万
查看次数

全局operator new和malloc之间的区别

C++有几个功能来获取动态存储,其中大部分功能在某些基本方面有所不同.OS通常会添加几个.

由于它们的便携性和相似性,其中两个特别感兴趣:malloc::operator new.

全局void* operator new(size_t, ::std::nothrow&)void* malloc(size_t)?之间是否有任何差异(标准和实施)?

由于我所说的似乎有些混乱,请考虑以下两个调用:

void* p = ::std::malloc(10);
void* q = ::operator new(10, ::std::nothrow);
Run Code Online (Sandbox Code Playgroud)

明显和微不足道的区别在于如何释放内存:

::std::free(p);
::operator delete(q);
Run Code Online (Sandbox Code Playgroud)

注意:这个问题不重复,例如new/delete和malloc/free有什么区别?因为它谈到使用实际上不执行任何ctor调用的全局 operator new.

c++ malloc memory-management new-operator c++11

23
推荐指数
2
解决办法
1851
查看次数

如果新操作员工作,应该总是检查吗?

我有两个关于new运算符的问题:

  1. 新操作员是否无法分配内存?

  2. 如果确实有一个对象被创建,那么每次使用new后都应该进行一次测试吗?

c++ new-operator

13
推荐指数
2
解决办法
5658
查看次数

必须新的一直跟着删除?

我认为在重新分配动态分配的指针时,我们都理解删除的必要性,以防止内存泄漏.但是,我很好奇,C++在多大程度上强制要求使用delete?例如,采取以下计划

int main()
{
     int* arr = new int[5];
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

虽然所有意图和目的都没有发生泄漏(因为你的程序结束了,操作系统会在它返回后清理所有内存),但标准是否还需要 - 或建议 - 在这种情况下使用delete [] ?如果没有,还有其他原因你会在这里删除[]吗?

c++ new-operator

11
推荐指数
3
解决办法
8147
查看次数

什么是c ++中的返回类型?

在C中,malloc()返回void*.但在C++中,new返回的是什么?

double d = new int;
Run Code Online (Sandbox Code Playgroud)

c++

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

'malloc'和'new'如何运作?它们有何不同(实施明智)?

我知道它们在语法上是如何不同的,并且C++使用new,而C使用malloc.但他们如何运作,在一个高级别的解释?

看看new/delete和malloc/free有什么区别?

c c++

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