首页 > 解决方案 > 什么是内存位置?

问题描述

令人惊讶的是,搜索引擎显示的信息很少。《C++ Concurrency In Action 》一书第 5 章指出:

在 C++ 中,一切都与对象和内存位置有关。

然后后来,

无论其类型如何,一个对象都存储在一个或多个内存位置中。每个这样的内存位置要么是标量类型的对象(或子对象),要么unsigned shortmy_class*相邻位字段的序列。

重点就像书中印刷的那样,很明显是一个基本概念,但没有定义。

那么,它什么?它是一个通用概念还是 C++11 标准中定义的更狭隘的概念?我应该如何考虑 32 位与 64 位架构和 CPU 寄存器?一个位域(或者更确切地说,一系列非零长度的相邻位域)是同一内存位置的一部分是什么意思?最后一条语句意味着内存位置可以存储任意长度的数据。

如果上面的引用定义,那么我希望看到有助于培养对概念的直观理解的讨论。

标签: c++multithreadingmemory

解决方案


根据 cppreference.com,内存位置是:

  • 标量类型的对象:算术类型(例如int)、指针类型(例如struct timeval*)、枚举类型(例如std::regex_constants::error_type)或最近生成的std::nullptr_t类型 - 或:
  • 非零长度位域的最大连续序列。

… qv https://en.cppreference.com/w/cpp/language/memory_model#Memory_location

…这就是你在“内存位置”直观地发现的——当产生一个指向内存中有效地址的指针时,变量的内容variable可能是什么。&variable


推荐阅读