Безымянные области могут быть созданы с помощью достаточно большого malloc
:
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
int *ip;
char *before, *after;
asprintf(&before, "cat /proc/%d/smaps > before", getpid());
asprintf(&after, "cat /proc/%d/smaps > after", getpid());
system(before);
ip = malloc(9999999);
if (!ip) abort();
system(after);
return 0;
}
Как показано
$ CFLAGS=-g make ilikebigmallocs
cc -g ilikebigmallocs.c -o ilikebigmallocs
$ ./ilikebigmallocs
$ diff before after
64a65,80
> 7f97425ac000-7f9742f36000 rw-p 00000000 00:00 0
> Size: 9768 kB
> Rss: 4 kB
...
, по крайней мере, некоторые из ваших областей были созданы malloc
или аналогичный (который под капотом вызывает mmap
). strace
(или sysdig
) может регистрировать следующее:
$ strace -e trace=memory -o blah ./ilikebigmallocs
$ awk '/^mmap/{print $NF}' blah
0x7fc6193b1000
0x7fc6193a6000
...
$ grep 7fc6193b1000 after
7fc6193b1000-7fc6193b2000 rw-p 00000000 00:00 0
$
Я думаю, вы могли бы использовать gdb
или трассировщик malloc или другие средства для разрешения конкретной mmap
создайте резервную копию определенного кода в вашем требовательном к памяти процессе...
Удалите vlc 2.2.4
sudo apt-get remove vlc
Загрузите Vlc 2.2.0 из здесь :
wget ftp://ftp.videolan.org/pub/videolan/vlc/2.2.0/vlc-2.2.0.tar.xz
Установите build-essential
и заголовки linux
...:
sudo apt-get install build-essential linux-headers-$(uname -r)
sudo apt-get install git libtool pkg-config autoconf
sudo apt-get install lua5.2 liblua5.2-dev
sudo apt-get build-dep vlc
install vlc 2.2.0
tar xf vlc-2.2.0.tar.xz
cd vlc-2.2.0
./bootstrap
./configure
make
sudo make install
Edit
Некоторую полезную информацию можно найти здесь: wiki.videolan: UnixCompile
Вы можете пойти в официальный репозиторий пакетов Debian, скачать любую версию любого пакета, который вы хотите, и установить его вручную с помощью dpkg
.
Я только что проверил, и стабильная версия там в настоящее время 2.2.4-1, что кажется мне странным, потому что она не может быть стабильнее, чем стабильное хранилище Debian.
Итак, скачайте его в соответствии с вашей архитектурой и установите его с помощью dpkg -i
. Например, для 64bits:
sudo dpkg -i vlc_2.2.4-1-deb8u1_amd64.deb
Попробуйте этот :тип apt show -a vlc | grep ^Version
. Вы получите две вещи:
Предупреждение о том, что не существует «стабильного интерфейса командной строки», что, как я полагаю, означает, что будущие версии apt могут работать иначе, чем текущие версии (, если я ошибаюсь, кто-нибудь оставьте комментарий ). Вы должны помнить об этом.
Он покажет вам все версии, которые вы можете установить. Предполагая, что 2.2.0 присутствует, вы сможете запуститьsudo apt install vlc=2.2.0-something
(заменить «что-то» на то, что говорит apt ), и ваш компьютер понизится. После этого вы можете пометить vlc как «удерживаемый» пакет, чтобы предотвратить его обновление в будущем. Вы можете сделать это с помощью apt-mark hold vlc
.
Если у вас возникнут какие-либо проблемы с зависимостями пакетов, запуск sudo aptitude
предоставит вам интерактивную программу, которая поможет решить эти проблемы. Возможно, вам придется установить aptitude с sudo apt install aptitude
.
Если версии 2.2.0 нет, вы не сможете установить vlc из apt (при использовании графического интерфейса, указанный графический интерфейс, вероятно, использует apt в качестве серверной части ). К счастью, есть и другие способы его установки. Как указал пользователь GAD3R, вы можете скомпилировать из исходного кода, используя шаги (и ), которые он уже указал. Или вы можете установить vlc с помощью snap или flatpak, но я считаю, что обе системы упаковки немного раздуты.
Вы также можете установить образ приложения на свой компьютер. Это так же просто, как A )загрузить файл, B )сделать его исполняемым )и C )запустить его. После быстрого поиска в Интернете мне удалось найти два образа приложения:2.2.8 и 3.0.0 . *СЛЕДУЕТ *безопасно устанавливать обе одновременно, чтобы вы могли видеть, какие из них работают, а какие нет. На всякий случай вам, вероятно, следует сначала установить 2.2.8, а затем попробовать 3.0.0, так как они могут иметь несовместимые настройки. К сожалению, оба изображения являются образами amd64, поэтому вы не сможете использовать их в 32-битной --битной ОС.