Задать вопрос
  • Почему linux съедает всю ОЗУ?

    @putvr
    Что выводит
    ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 10

    ?
    Ответ написан
    3 комментария
  • Какой тип данных будет более правильным?

    CityCat4
    @CityCat4 Куратор тега C
    //COPY01 EXEC PGM=IEBGENER
    Утечка памяти не зависит от природы программы - ну, если Вы конечно не допустили глобального косяка типа забытого free() после malloc() Утечка памяти зависит от реализации ядра ОС.
    Использовать нужно всегда динамическую память. В статической разве что константы хранить.
    Почему? А очень просто получить эксплойт через переполнение границ массива.
    Вы, конечно, скажете - да я простой юзер, я модули ядра не пишу etc... на что я отвечу - а стиль программирования формируется. Привыкнув делать статические массивы - Вы и в модуле ядра будете делать так.
    Ответ написан
    Комментировать
  • В чем разница между указателями в си?

    @rPman
    Есть еще символ & который позволяет описывать переменные, доступ к которым синтаксически ничем не отличается от прямого доступа но по факту это ссылка:
    class MyClass
    {
    public int value;
    MyClass(int _value):value(_value){}
    }
    
    MyClass *tmp=new MyClass(10);
    MyClass &object=*tmp;
    object.value=20;
    delete(tmp);

    99% различий кроются в способах инициализации (и освобождении памяти), и в последние 10 лет в c++ наплодили столько изменений именно вокруг этого.

    Причина - попытка получить больше контроля над памятью объектов, чтобы у компилятора было больше возможностей по ее освобождению.

    p.s. используйте & для определения типов параметров передаваемых в функции, чтобы происходило не копирование а передача по ссылке, и при этом синтаксически вы бы работали с объектами напрямую.
    Ответ написан
    Комментировать
  • В чем разница между указателями в си?

    CityCat4
    @CityCat4 Куратор тега C
    //COPY01 EXEC PGM=IEBGENER
    Все просто.
    Попробуйте-как динамически память выделить, используя только mt1 :) (Хинт: не получится нифига. Выделить память через malloc еще можно, используя sizeof struct, а вот присвоить адрес начала области переменной mt1 фиг получится)
    Структуры - офигенное средство для расписывания памяти, особенно при чтении бинарных файлов фиксированной структуры внутри - считал N байт в область, наложил на эту область структуру - и все, можно к полям обращаться. Что, собственно в примере у Вас и делается.
    Ответ написан
    Комментировать
  • В чем разница между указателями в си?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Есть понятие стека. Стек небольшого размера: на нём большие объекты лучше не выделять. Поэтому необходима ещё и куча -- там выделяют память с помощью malloc.

    Помимо этого, в первом и втором случае различается время жизни объектов. Объект, выделенный на стеке живёт до конца области видимости (до закрывающейся фигурной скобки обычно). Объект выделенный в куче живёт пока его явно не удалят (с помощью метода free, который вы забыли вызвать). Т.е. такие динамически выделенные объекты ещё и удобны, если вам надо передать сам объект и/или управление его временем жизни в другую часть программы.

    Ну и если вы хотите модифицировать любой объект (не важно как созданный) в какой-то сторонней функции, то вам надо передать указатель на этот объект. Насколько я помню, в C ссылок нет.

    PS
    По C лучше K&R читайте.
    Ответ написан
    Комментировать
  • Возможно ли обновить ядро в arch linux без перезагрузки?

    @Vitsliputsli
    Allepta, не нашел красивого решения, только добавить хуки с бекапом удаляемого ядра в /tmp с линками на него, подразумевается, что /tmp чистится после перезагрузки, а битые линки удаляем при следующем обновлении ядра. Вот 2 хука:
    save-running-kernel-modules-pre.hook:
    [Trigger]
    Operation = Upgrade
    Operation = Remove
    Type = Package
    Target = linux
    
    [Action]
    Depends = bash
    Depends = find
    When = PreTransaction
    Exec = /usr/bin/bash -c "/usr/bin/find . -type l -exec test ! -e {} \; -delete; /usr/bin/mkdir -p /tmp/save-running-kernel-modules && /usr/bin/cp -a /usr/lib/modules/$(uname -r) /tmp/save-running-kernel-modules"

    save-running-kernel-modules-post.hook:
    [Trigger]
    Operation = Upgrade
    Operation = Remove
    Type = Package
    Target = linux
    
    [Action]
    Depends = bash
    When = PostTransaction
    Exec = /usr/bin/bash -c "/usr/bin/ln -s /tmp/save-running-kernel-modules/$(uname -r) /usr/lib/modules/$(uname -r)"

    Т.к. решение все-таки костыльное в AUR не буду добавлять.
    Ответ написан
    Комментировать