相关疑难解决方法(0)

C++中指针变量和引用变量之间有什么区别?

我知道引用是语法糖,因此代码更容易读写.

但有什么区别?


以下答案和链接摘要:

  1. 指针可以重新分配任意次数,而在绑定后无法重新分配引用.
  2. 指针可以指向nowhere(NULL),而引用总是指对象.
  3. 您不能使用指针来获取引用的地址.
  4. 没有"参考算术"(但您可以获取引用所指向的对象的地址,并对其进行指针运算&obj + 5).

澄清一个误解:

C++标准非常谨慎,以避免规定编译器如何实现引用,但每个C++编译器都将引用实现为指针.也就是说,声明如下:

int &ri = i;
Run Code Online (Sandbox Code Playgroud)

如果它没有完全优化,则分配与指针相同的存储量,并将地址i放入该存储中.

因此,指针和引用都使用相同数量的内存.

作为基本规则,

  • 使用函数参数和返回类型中的引用来提供有用的自我文档化接口.
  • 使用指针实现算法和数据结构.

有趣的读物:

c++ pointers reference c++-faq

3115
推荐指数
34
解决办法
94万
查看次数

968
推荐指数
27
解决办法
19万
查看次数

哪个更快:堆栈分配或堆分配

这个问题可能听起来相当简单,但这是我与另一位与我合作的开发人员的辩论.

我正在小心处理堆栈分配的东西,而不是堆分配它们.他正在跟我说话,看着我的肩膀并评论说这没有必要,因为他们的表现是明智的.

我一直认为堆栈的增长是恒定的时间,并且堆分配的性能取决于堆的当前复杂性(用于找到合适大小的孔)和解除分配(折叠孔以减少碎片,如如果我没有弄错的话,许多标准库实现在删除期间需要时间来完成此操作.

这让我觉得可能非常依赖于编译器.特别是对于这个项目,我使用Metrowerks编译器来实现PPC架构.对这种组合的洞察力将是最有帮助的,但总的来说,对于GCC和MSVC++,情况如何?堆分配不如堆栈分配高吗?没有区别吗?或者差异是如此微小,它变得毫无意义的微优化.

c++ memory heap performance stack

489
推荐指数
13
解决办法
12万
查看次数

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

C++中的堆栈,静态和堆

我已经搜索过了,但我对这三个概念并不是很了解.我何时必须使用动态分配(在堆中)以及它的真正优势是什么?静态和堆栈有什么问题?我可以编写整个应用程序而无需在堆中分配变量吗?

我听说其他语言包含了"垃圾收集器",所以你不必担心内存.垃圾收集器做什么?

您可以自己操作内存,而不能使用此垃圾收集器吗?

有人告诉我这个声明:

int * asafe=new int;
Run Code Online (Sandbox Code Playgroud)

我有一个"指针指针".这是什么意思?它不同于:

asafe=new int;
Run Code Online (Sandbox Code Playgroud)

c++ heap stack static garbage-collection

157
推荐指数
4
解决办法
14万
查看次数

node.js process.memoryUsage()的返回值代表什么?

从官方文档(来源):

process.memoryUsage()

返回一个对象,描述以字节为单位测量的Node进程的内存使用情况.

var util = require('util');

console.log(util.inspect(process.memoryUsage()));
Run Code Online (Sandbox Code Playgroud)

这将产生:

{ rss: 4935680, heapTotal: 1826816, heapUsed: 650472 }
Run Code Online (Sandbox Code Playgroud)

heapTotal和heapUsed是指V8的内存使用情况.

究竟rss,heapTotalheapUsed代表什么?

这似乎是一个微不足道的问题,但我一直在寻找,到目前为止我找不到一个明确的答案.

v8 node.js

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

大数组大小的分段错误

以下代码在2Gb机器上运行时给出了分段错误,但在4GB机器上运行.

int main()
{
   int c[1000000];
   cout << "done\n";
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

阵列的大小只有4Mb.可以在c ++中使用的数组大小是否有限制?

c++ arrays segmentation-fault

103
推荐指数
3
解决办法
9万
查看次数

堆栈内存与堆内存

可能重复:
堆栈和堆的内容和位置

我用C++编程,我总是想知道堆栈内存与堆内存到底是什么.我所知道的就是当我调用new时,我会从堆中获取内存.如果创建局部变量,我会从堆栈中获取内存.经过对互联网的一些研究,最常见的答案是堆栈内存是临时的,堆内存是永久性的.

堆栈和堆内存模型是操作系统或计算机体系结构的概念吗?那么它的一些可能不会遵循堆栈和堆内存模型或所有它们都遵循它?

堆栈和堆内存是虚拟内存的内存模型的抽象(可能在磁盘和RAM之间交换内存).堆栈和堆内存在物理上可能是RAM还是磁盘?那么堆分配似乎比堆栈对应慢的原因是什么?

此外,主程序将在堆栈或堆中运行?

此外,如果进程耗尽堆栈内存或堆内存分配,会发生什么?

谢谢

c++ memory

89
推荐指数
3
解决办法
12万
查看次数

C#全局变量

我如何在C#中声明一个变量,以便每个类(*.cs)都可以访问其内容,而无需实例引用?

c# variables scope

88
推荐指数
4
解决办法
35万
查看次数

内存分配:堆栈与堆?

我对Stack vs Heap之间的内存分配基础感到困惑.根据标准定义(每个人都说的东西),所有值类型都将被分配到堆栈,参考类型将进入.

现在考虑以下示例:

class MyClass
{
    int myInt = 0;    
    string myString = "Something";
}

class Program
{
    static void Main(string[] args)
    {
       MyClass m = new MyClass();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,内存分配将如何在c#中发生?MyClass(即m)的对象是否会完全分配给堆?也就是说,int myIntstring myString既会去堆?

或者,该对象将分为两部分,并将分配给两个内存位置,即堆栈和堆?

.net c# heap stack

79
推荐指数
4
解决办法
6万
查看次数