c++ - 什么是内存位置?
问题描述
令人惊讶的是,搜索引擎显示的信息很少。《C++ Concurrency In Action 》一书第 5 章指出:
在 C++ 中,一切都与对象和内存位置有关。
然后后来,
无论其类型如何,一个对象都存储在一个或多个内存位置中。每个这样的内存位置要么是标量类型的对象(或子对象),要么
unsigned short
是my_class*
相邻位字段的序列。
重点就像书中印刷的那样,很明显是一个基本概念,但没有定义。
那么,它是什么?它是一个通用概念还是 C++11 标准中定义的更狭隘的概念?我应该如何考虑 32 位与 64 位架构和 CPU 寄存器?一个位域(或者更确切地说,一系列非零长度的相邻位域)是同一内存位置的一部分是什么意思?最后一条语句意味着内存位置可以存储任意长度的数据。
如果上面的引用是定义,那么我希望看到有助于培养对概念的直观理解的讨论。
解决方案
根据 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
推荐阅读
- python-3.x - 我应该在 Python 中使用什么数据结构来表示 Poker - NL Texas Holdem 中的翻牌前树?
- java - 如何测试应用程序与 Google Cloud Storage 的集成?
- haskell - 了解haskell中的循环/递归数据类型
- html - 使用纯 CSS 的出现和消失动画
- function - 将 GeoJSON 中的子字符串替换为弹出窗口传单
- c++ - cblas_dcopy 对 memcpy_s 和 std::copy 的影响如何?
- google-cloud-platform - 需要帮助:NodeJs 应用部署在 Google Cloud Run 上,无法连接到 Google Cloud SQL 实例
- sql - 错误:频谱嵌套查询错误。引用嵌套表的子查询不能包含 DISTINCT 操作。红移
- java - MSAL4J - 令牌生成错误:未知或无效实例
- python - Bokeh Server:点击 Scatter 以在条形图中显示其他数据