Если я определю и инициализирую большой вектор глобально, будет ли его размер включен в объектный файл?
например,
case 1 : Если у меня есть неинициализированный большой глобальный массив x, его размер правильно отображается в размере сегмента bss, но он не будет добавлен к размеру объектного файла, так как это неинициализированные данные, это ожидается .
#include <iostream>
#define SIZE 200000000
char x[SIZE];
int main (void)
{
return 0;
}
$ размер a.out
text data bss dec hex filename
1762 572 200000040 200002374 bebcb46 a.out
$ ls -l a.out
-rwxrwxr-x. 1 ur ur 7477 Jan 28 02:52 a.out
case 2: аналогично, если у меня большой инициализированный глобальный массив, его размер будет включен в сегмент данных (не в bss), и он также будет отражать размер объектного файла, как и ожидалось.
#include <iostream>
#define SIZE 200000000
//remaining entries will be value initialized
char x[SIZE] = { 'a', 'b' };
int main (void)
{
return 0;
}
$ размер a.out
text data bss dec hex filename
1762 200000600 24 200002386 bebcb52 a.out
$ ls -l a.out
-rwxrwxr-x. 1 ur ur 200007533 Jan 28 02:34 a.out
case 3: Теперь, если вместо инициализированного глобального массива я использую инициализированный большой глобальный вектор, то я ожидаю поведение, подобное case 2 (размер файла obj включает размер инициализированного массива ) но вместо этого
Я получаю следующее поведение
#include <iostream>
#include <vector>
#define SIZE 200000000
std::vector<char> x(SIZE, 'c');
int main (void)
{
return 0;
}
$ размер a.out
text data bss dec hex filename
4936 604 48 5588 15d4 a.out
$ ls -l a.out
-rwxrwxr-x. 1 ur ur 13583 Jan 28 02:44 a.out
Может ли кто-нибудь объяснить это поведение, почему инициализированный вектор отсутствует в объектном файле и как глобально определенный вектор инициализируется во время выполнения. Я думаю, что мне не хватает чего-то фундаментального Спасибо