可能重复:
堆栈和堆的内容和位置
我在堆栈和堆上有几个问题.
要知道的基本事情是堆栈比堆快,但是有限.(如我错了请纠正我).
但是,我总是想知道堆栈和堆是如何工作的.RAM只是一块内存,它不分为'堆栈'和'堆'(或者是它?).如果是这样,为什么我们首先将堆栈和堆中的内存分开?
操作系统可以让我们能够分配堆栈中的所有内容 - >一切都变得更快 - >幸福的世界?
我很确定事实并非如此.但为什么!?谁能给我一个深入的答案?
很抱歉,如果这篇帖子是某人发过的一些帖子的副本,那么有很多与堆栈和堆相关的帖子,我找不到我所拥有的确切问题.如果您碰巧知道一个,请继续并将其链接.
我最近static在函数之前看到了关于关键字的SO ,我想知道如何正确使用它.
1)我应该何时static在非成员函数之前编写关键字?
2)在标题中定义静态非成员函数是否危险?为什么不)?
(附带问题)
3)是否可以以某种方式在头文件中定义一个类,以便它只能在您首先使用它的翻译单元中使用?
(我问这个的原因是因为我正在学习STL,它可能是我的谓词等(可能是函子)的一个很好的解决方案,因为我不喜欢在cpp文件中定义除成员函数之外的函数)
(另外,我认为它与原始问题有关,因为根据我目前的推理,它会像static函数之前那样做)
在看到一些答案时出现的另一个问题:
4)很多人告诉我,我必须在头文件中声明静态函数,并在源文件中定义它.但静态函数对于翻译单元是唯一的.链接器怎样才能知道哪些翻译单元是独一无二的,因为头文件不直接涉及到一个源文件(仅当您包括他们)?
class A
{
static int iterator;
class iterator
{
[...]
};
[...]
};
Run Code Online (Sandbox Code Playgroud)
我(我想)理解为什么typename需要这里:
template <class T>
void foo() {
typename T::iterator* iter;
[...]
}
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么typename不需要这里:
void foo() {
A::iterator* iter;
[...]
}
Run Code Online (Sandbox Code Playgroud)
谁能解释一下?
编译器之所以没有后者的问题,我发现在评论中得到了很好的回答:
在A::iterator我的情况下,我不明白为什么编译器不会混淆它static int iterator? - xcrypt
@xcrypt因为它知道两者A::iterator是什么,并且可以根据它的使用方式选择哪一个 - Seth Carnegie
typename我认为编译器在合格的从属名称之前需要的原因在Kerrek SB接受的答案中得到了很好的回答.请务必阅读有关该答案的评论,尤其是iammilind的评论:
"T :: A*x ;,对于T :: A是一个类型且T :: A是一个值的情况,这个表达式都可以为真.如果A是一个类型,那么它将导致指针声明;如果A是一个值,然后它将导致乘法.因此,单个模板对于2种不同类型将具有不同的含义,这是不可接受的."
好吧,我正在学习 C++,从来没有真正学过如何做不是OO的东西.我正试图获得更多C风格编码的经验.
#pragma once
#ifndef GLOBALINFORMATION_H
#define GLOBALINFORMATION_H
#include "MapInformation.h"
namespace gi {
MapInformation mapInf;
};
#endif
Run Code Online (Sandbox Code Playgroud)
我希望能够从我的项目中的每个头和cpp访问gi :: mapInf.现在我在每个标题中都包含了globalinformation.h,所以我收到了多个定义的链接器错误.
我该如何解决这个问题?
我正在学习多线程,但在阅读了一些教程后,我有点困惑.我不明白多线程如何加速应用程序.
通过直觉,我会说多线程会减慢应用程序的速度,因为你不得不等待那些信号量.
当线程无法同时运行时,多线程如何以及何时可以加速应用程序?
我听过很多人说任何使用typeid都是糟糕的设计,但对我来说似乎它提供了很好的实用性.
typeid"糟糕的设计"?typeid可接受?我是图形编程的新手,我想知道为什么我更喜欢GDI而不是DirectX/OpenGL的硬件加速图形?
是否还有充分的理由使用GDI?
我在保持术语类,对象,变量和数据类型方面遇到了一些麻烦.
可以将类视为数据类型吗?一个对象可以被视为变量吗?
另外,技术上有什么区别?
可能重复:
为什么不允许使用静态const浮点数?
有什么理由说在C++中这是不可能的吗?这让我很困惑.
static const int A = 100; //no error
static const float B = 2.0f; //error, can't define this type in class definition.
Run Code Online (Sandbox Code Playgroud) 这篇文章:http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf(第12页)似乎在锁和内存屏障之间有所不同
我想知道锁,内存屏障和信号量之间的区别是什么?
(虽然其他问题可能会提到锁和同步对象之间的区别,但我没有发现锁和内存屏障之间的区别)