C++ sizeof Vector 是 24?

2023-11-22

我只是在闲逛并学习向量和结构,有一次,我尝试以字节为单位输出向量的大小。这是代码:

#include <iostream>
#include <vector>

struct Foo{
    std::vector<int> a;
};

int main()
{
    using std::cout; using std::endl;   

    Foo* f1 = new Foo;

    f1->a.push_back(5);
    cout << sizeof(f1->a) << endl;
    cout << sizeof(f1->a[0]) << endl;

    delete[] f1;
}

输出是24 and 4.

显然第二行打印了 4,因为这是 int 的大小。但为什么另一个值是 24呢?向量占用24字节内存吗?谢谢!


虽然公共接口std::vector由标准定义,可以有不同的实施:换句话说,在幕后是什么std::vector可以从实施到实施发生变化。

即使在相同的实现中(例如:给定版本的 Visual C++ 附带的 STL 实现),std::vector可以从发布版本和调试版本更改。

您看到的 24 大小可以解释为 3 个指针(在 64 位架构上每个指针的大小为 8 个字节;因此您有 3 x 8 = 24 个字节)。这些指针可以是:

  • 向量的开始
  • 向量末尾
  • 向量保留内存的末尾(即向量的capacity)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ sizeof Vector 是 24? 的相关文章

  • 具有相同参数类型但具有不同常量限定符的 std::vector 的转换

    问题很简单 静态转换 或其他一些转换 通常是安全的 std vector lt Foo gt to std vector lt const Foo gt 就二进制而言 我不明白为什么本机类型会有所不同 毕竟const是一种语言约束 不应影响
  • X11 模式对话框

    如何使用 Xlib 在 X11 中创建模式对话框 模态对话框是一个位于应用程序其他窗口之上的窗口 就像瞬态窗口一样 并且拒绝将焦点给予应用程序的其他窗口 在 Windows 中 当试图从模态窗口夺取焦点时 模态也会通过闪 烁模态窗口的标题栏
  • 是否有可能劫持标准输出

    我正在尝试使用 C 重定向 Windows XP 上已运行进程的标准输出 我知道如果我自己生成进程 我可以做到这一点 但对于这个应用程序 我更喜欢一个 监听器 我可以附加到另一个进程 这在纯 Net 中可能吗 如果不可能 在 Win32 中
  • Caliburn.Micro - ShowDialog() 如何关闭对话框?

    EDIT 新信息 刚刚设法让记录器工作 老实说 我不知道 cm 有一个 并且在尝试使用时收到此消息TryClose TryClose requires a parent IConductor or a view with a Close m
  • 平滑手绘曲线

    我有一个允许用户绘制曲线的程序 但这些曲线看起来不太好 它们看起来摇摇欲坠 而且是手绘的 所以我想要一种能够自动平滑它们的算法 我知道平滑过程中存在固有的模糊性 因此它不会每次都完美 但这种算法似乎确实存在于多个绘图包中 并且它们工作得很好
  • 为什么子函数不销毁GtkWindow?

    这是我的代码 void window first void enter window2 GtkWidget w gpointer data void quit GtkWidget w gpointer data void quit int
  • 如何从 Qt 应用程序通过 ODBC 连接到 MySQL 数据库?

    我有一个新安装的 MySQL 服务器 它监听 localhost 3306 从 Qt 应用程序连接到它的正确方法是什么 原来我需要将MySQL添加到ODBC数据源 我在遵循这个视频教程后做到了这一点 https youtu be K3GZi
  • 嵌入资源文件的路径

    我的资源文件中有一个图标 我想引用它 这是需要图标文件路径的代码 IWshRuntimeLibrary IWshShortcut MyShortcut MyShortcut IWshRuntimeLibrary IWshShortcut W
  • ContentDialog 未与 UWP 中心对齐

    据我所知 ContentDialog的默认行为应该是使其在 PC 上居中并在移动设备上与顶部对齐 但就我而言 即使在 PC 上我也将其与顶部对齐 但我不明白发生了什么 我正在使用代码隐藏来创建它 这是我正在使用的代码片段 Creates t
  • Monotouch全局异常处理

    我在野外发现了一只令人讨厌的虫子 但我无法确定它的具体情况 有没有办法拥有全局 Try Catch 块 或者有办法处理 Monotouch 中未处理的任何异常 我可以包起来吗UIApplication Main args 在 try cat
  • 组合框下拉位置

    我有一个最大化的表单 其中包含 500px 的组合框控件 停靠在右上角 Width 尝试打开组合框后 列表的一半超出了屏幕 如何强制列表显示在表单中 棘手的问题 我找不到解决这个问题的好办法 只是一个解决方法 添加一个新类并粘贴如下所示的代
  • 控制台应用程序中使用 Unicode 字符的 _tprintf

    我正在从 Unicode 构建的控制台应用程序 使用 C 和 Visual Studio 2008 执行这个简单的输出 此代码旨在在 Windows 上运行 tprintf L Some sample string n 一切正常 但是如果我
  • 如何自定义 Google 测试失败消息?

    我编写了一个如下所示的 Google 测试 它将一些计算值与 CSV 文件中预期存储的值进行比较 class SampleTest public testing Test public void setupFile const std st
  • 如何从外语线程调用Python函数(C++)

    我正在开发一个程序 使用 DirectShow 来抓取音频数据 媒体文件 DirectShow 使用线程将音频数据传递给回调 我的程序中的函数 然后我让该回调函数调用另一个函数 Python 中的函数 我使用 Boost Python 来包
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • 如何同步nosql db(ravendb)中的更改

    我已经开始在 RavenDB 的示例上学习 NoSQL 我从一个最简单的模型开始 假设我们有由用户创建的主题 public class Topic public string Id get protected set public stri
  • C++ 中是否有与 PHP 的explode() 函数等效的函数? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 中分割字符串 https stackoverflow com questions 236129 splitting a string in c 在 PHP 中 explode 函数将获取一个字
  • 选择合适的IDE

    您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
  • 使用 CodeDOM 将程序集添加到 BuildManager 会导致间歇性错误

    我正在使用 CodeDOM 在运行时创建内存中程序集 如下所示 public Assembly Compile CodeCompileUnit targetUnit string path Path GetDirectoryName new
  • 在windows + opengl中选择图形设备

    我知道如何使用 openGL 打开窗口 使用 Win32 或其他工具包 但是当系统有2块显卡时 如何选择要渲染的图形设备 我的编程语言是 C 我专注于 Windows 但任何示例都将受到欢迎 编辑 也许更好地解释我的问题是个好主意 以便添加

随机推荐

  • Java方法使用反射分配对象字段值

    我想知道 Java 中是否可以有类似下面的内容 public class MyClass private String name private Integer age private Date dateOfBirth constructo
  • 如何自动回答 y(kill-matching-buffers 询问我是否应该终止修改的缓冲区)?

    在 Emacs 中 如何杀死与正则表达式匹配的缓冲区 Edit 我该如何回答y自动地 kill matching buffers询问我是否应该杀死修改过的缓冲区 像这样的东西吗 defun bk kill buffers bfrRgxp i
  • 使用 React Router 进行条件渲染

    我想在顶部渲染一些带有导航的路线 而在没有任何导航的情况下渲染其他路线 如注册 登录页面 对于导航的设置 我有 const App gt
  • 从类路径中的任何位置加载资源

    我有一个简单的 java 应用程序 它从当前包加载属性文件 this getClass getResourceAsStream props properties 当我想要的属性文件位于当前包中时 这可以正常工作 但是 我想将此应用程序打包为
  • 素数生成器解释? [复制]

    这个问题在这里已经有答案了 我正在寻找一种生成素数的算法 我找到了罗伯特 威廉 汉克斯 Robert William Hanks 创作的以下一幅作品 它非常有效并且比其他算法更好 但我无法理解其背后的数学原理 def primes n Re
  • 将数组传递给 Java 方法

    如何将整个数组传递给方法 private void PassArray String arrayw new String 4 populate array PrintA arrayw private void PrintA String a
  • Java:具有接口属性的对象的 Jackson 多态 JSON 反序列化?

    我正在使用杰克逊的ObjectMapper反序列化包含接口作为其属性之一的对象的 JSON 表示形式 代码的简化版本可以在这里看到 https gist github com sscovil 8735923 基本上 我有一个班级Asset有
  • ViewPager 和 FragmentPagerAdapter 中 Fragment 的 Android 生命周期管理

    我一直在努力找出如何正确管理 Fragment 中的内容FragmentActivity with a ViewPager是 在详细介绍之前 我先对我面临的问题进行快速总结如下 我有一个FragmentActivity with a Vie
  • Android Studio 2.1 将字节码转换为 dex 时出错

    自从我将 android studio 从 2 0 更新到 2 1 后 我收到以下错误 错误 将字节码转换为 dex 时出错 原因 Dex 无法解析版本 52 字节代码 这是由于 使用 Java 8 或更高版本编译的库依赖项 如果 您正在库
  • 使用 Visual Studio 2015 编译 ToolsVersion 12

    我安装了一台新电脑并安装了VS2015 编译我当前正在处理的项目会产生一些无效代码 ILSpy 创建无法编译的源代码 使用 ToolsVersion 12 在 VS2013 中运行良好 日志文件告诉我 ToolsVersion 12 丢失
  • ExtJs4 - 与网格 ColumnModel 等效的是什么?

    ExtJs3相当于什么Ext grid ColumnModel在 ExtJs4 中 我想做的是隐藏一列 我在 ExtJs3 中做了如下操作 grid colModel setHidden 1 true 您可以使用 Ext grid colu
  • 查找非有限值的最快方法

    这是受到以下启发 python numpy 中的组合掩码 任务是创建一个包含所有非有限值的布尔数组 例如 gt gt gt arr np array 0 2 np inf np inf np nan gt gt gt np isfinite
  • 使用 EventTrigger 设置属性

    我希望能够使用 EventTrigger 设置属性 但这有很多问题 1 EventTriggers仅支持Actions 所以我必须使用storyBoard来设置我的属性 2 一旦我使用故事板 我有两个选择 停止 动画停止后 值将恢复到动画开
  • git log -L 不带差异

    我正在尝试使用git log L
  • 使用 Ruby 进行科学编程

    我正在使用 python 或 Octave 进行数学计算 因为手头有非常好的函数和库 但最近我对 Ruby 产生了兴趣 我想知道 Ruby 中是否有相当于 Python 中的 numpy scipy 的科学编程工具 具体来说 我正在寻找一些
  • 选择页面上的所有元素[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我正在寻找 javascript 中的一个函数 它可以单击我页面上的每个元素 链接 按钮
  • 将指针传递给结构数组时出错

    include
  • Bootstrap 多选不起作用

    我正在尝试使用多选 Bootstrap 我使用了以下代码 该代码也可以在他们的网站上找到 http davidstutz github io bootstrap multiselect 它显示了多选按钮 并且由于我已经选择了 奶酪和意大利辣
  • 没有 ControlContainer 的提供者和 ControlContainer 没有提供者

    我正在开发一个使用 Angular2 的应用程序 我正在尝试在我的应用程序中使用反应式表单 但遇到了一些错误 第一个错误是关于 NgControl 的 如下所示 没有 NgControl 的提供者 div 类 col md 8 错误 gt
  • C++ sizeof Vector 是 24?

    我只是在闲逛并学习向量和结构 有一次 我尝试以字节为单位输出向量的大小 这是代码 include