Вывод огромного размера в / proc / smaps - PullRequest
0 голосов
/ 17 марта 2020

Я смотрю на / proc // smaps для программы, скомпилированной с помощью libasan (-fsanitize = address). Я вижу огромные размеры и пытаюсь понять, что это значит. Например:

2008fff7000-10007fff8000 rw-p 00000000 00:00 0 
Size:           15032123396 kB
Rss:              142592 kB
Pss:              142592 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:    142592 kB
Referenced:       142592 kB
Anonymous:        142592 kB
AnonHugePages:         0 kB
Shared_Hugetlb:        0 kB
Private_Hugetlb:       0 kB
Swap:                  0 kB
SwapPss:               0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB
VmFlags: rd wr mr mw me nr dd nh 

Общий размер составляет 21 475 147 836 К

Я использую Amazon Linux AMI выпуск 2018.03 с ядром 4.4.19-29.55.amzn1.x86_64

Есть идеи?

1 Ответ

2 голосов
/ 17 марта 2020

ASAN работает, резервируя один байт (известный как теневой байт) на 8 байт пользовательской памяти. Теневые байты проверяются при каждом доступе к памяти и обновляются при каждом изменении состояния выделения.

Процессы, работающие на Linux на x86_64, имеют около 2 ^ 47 байтов доступного адресуемого пространства, поэтому ASAN отображает около 2 ^ 47 * 1/9 ~ = 15 ТБ для этих теневых байтов.

Это отображение, которое вы видите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...