c – 如果全局定义向量,将何时分配内存空间

c – 如果全局定义向量,将何时分配内存空间,第1张

概述如果我全局定义并初始化一个大型向量,那么它的大小是否会包含在目标文件中? 例如 情况1:如果我有一个未初始化的大型全局数组x,它的大小正确显示在bss段大小,但它不会被添加到目标文件大小,因为它是未初始化的数据,这是预期的. #include <iostream>#define SIZE 200000000char x[SIZE];int main (void){ return 0 如果我全局定义并初始化一个大型向量,那么它的大小是否会包含在目标文件中?

例如

情况1:如果我有一个未初始化的大型全局数组x,它的大小正确显示在bss段大小,但它不会被添加到目标文件大小,因为它是未初始化的数据,这是预期的.

#include <iostream>#define SIZE 200000000char x[SIZE];int main (voID){  return 0;}

$size a.out

text           data            bss            dec            hex        filename1762            572        200000040        200002374        bebcb46        a.out

$ls -l a.out

-rwxrwxr-x. 1 ur ur 7477 Jan 28 02:52 a.out

情况2:类似地,如果我有一个大的初始化全局数组,它的大小将包含在数据段(不是在bss中),它也将按预期反映在目标文件的大小.

#include <iostream>#define SIZE 200000000//remaining entrIEs will be value initializedchar x[SIZE] = { 'a','b' };int main (voID){  return 0;}

$size a.out

text           data            bss            dec            hex        filename1762        200000600             24        200002386        bebcb52        a.out

$ls -l a.out

-rwxrwxr-x. 1 ur ur 200007533 Jan 28 02:34 a.out

情况3:现在如果不使用初始化的全局数组而是使用初始化的大型全局向量,那么我期待像行为2这样的行为(obj文件大小包括初始化的数组大小),而是
我得到以下行为

#include <iostream>#include <vector>#define SIZE 200000000std::vector<char> x(SIZE,'c');int main (voID){  return 0;}

$size a.out

text           data            bss            dec            hex        filename4936            604             48           5588           15d4        a.out

$ls -l a.out

-rwxrwxr-x. 1 ur ur 13583 Jan 28 02:44 a.out

任何人都可以解释这种行为,为什么初始化的向量不存在于目标文件中,以及如何在运行时初始化全局定义的向量.我想我在这里缺少一些基本的东西.谢谢

解决方法 std :: vector在运行时在堆上分配其存储.如果将一个定义为全局变量,那么它的构造函数将在main()启动之前运行.使用您提供的参数,构造函数将为堆上的SIZE字符分配空间,然后运行循环以将字母c存储到每个字符中.

目标文件中存在的所有内容都是传递给向量构造函数的字母c的单个副本.

总结

以上是内存溢出为你收集整理的c – 如果全局定义向量,将何时分配内存空间全部内容,希望文章能够帮你解决c – 如果全局定义向量,将何时分配内存空间所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1220697.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存