• Странное поведение массивов в Си

    ntkt
    @ntkt
    Потомственный рыцарь клавиатуры и паяльника
    Массив как переменная в C — это псевдоним адреса в памяти, по которому лежит его первый элемент.
    Массива ни в машинном коде, ни в памяти, строго говоря, не существует. Существует только его «содержимое» — его элементы.
    При обращении к элементу массива действия производятся машиной прямо над его содержимым по вычисленному адресу.
    Самого массива — не существует.
    Всякий раз, когда в С Вы работаете с массивом — компилятор использует или указатель на первый элемент массива (например, когда Вы передаете массив в функцию), или адрес первого элемента массива, а машина далее с этим работает.

    Указатель в C — это переменная, содержащая адрес в памяти.
    Указатель в машинном коде и памяти — существует. Он имеет значение — число размером с разрядность машины, а значение числа — это адрес в памяти.
    Указатель как число — может быть передан в регистрах, лежать на стеке, и т.д.
    При обращении к байту/слову/двойному слову/… по смещению через указатель, в машинном коде указатель разыменовывается (в явном виде берется его значение=адрес) т.е. в машинном коде происходят несколько другие действия, чем в случае для массива.

    Если хотите понять полностью — откройте рядом книжку по ассемблеру, компилируйте Ваши примеры с выводом промежуточного ассемблерного кода (или смотрите в дизассемблер), и аккуратно сравнивайте по шагам.

    Вот, кстати, приличное описание различий на английском:
    eli.thegreenplace.net/2009/10/21/are-pointers-and-arrays-equivalent-in-c/
    Ответ написан
    Комментировать
  • Почему датацентры избегают FreeBSD?

    amarao
    @amarao
    Рассказываю:

    1) У FreeBSD были какие-то заморочки с паравиртуализацией.
    2) Для FreeBSD нужны отдельные люди, которые её знают. Простейшая экономия ресурсов. Запросов на FreeBSD даже меньше, чем на windows.
    Ответ написан
    Комментировать
  • Аспирантура для ruby \ ios разработчика?

    @ZloiZmei
    Как человек недавно окончивший аспирантуру (4 года, потому что заочник. Хотя на практике у нас разницы не было) и защитивший диссер, скажу — лучше бы я работал :) Чего и вам советую. Саму степень получить никогда не поздно (да и полезно, возможно я этого ещё не ощутил), но имея статьи и «кирпич» можно обойтись и без аспирантуры.
    Ответ написан
    Комментировать
  • Как узнать в Linux: с какого устройства загружена система?

    WNeZRoS
    @WNeZRoS
    Определение места установки grub:
    root@laptop:/home/iam# grub-probe -t device /
    /dev/sda6
    root@laptop:/home/iam# grub-probe -t drive /
    (/dev/sda,msdos6)
    Ответ написан
    2 комментария
  • Выбор СУБД для проекта?

    DevMan
    @DevMan
    Берите PostgreSQL — не ошибётесь.
    Ответ написан
    3 комментария
  • Выбор СУБД для проекта?

    @IlVin
    Однозначно Oracle.
    И преимущества его в том, что за знания как его готовить платят больше, чем за знания как готовить MySQL.
    А в реальности даже MySQL на MyISAM в боевых условиях миллионы пользователей может обслуживать, если его правильно приготовить под конкретные условия.
    Кстати, MySQL тоже Oracle… :)

    А теперь шутки в сторону — выбирайте ту БД, для которой можно относительно просто найти разработчиков: Проект вырастет, Вы захотите пойти на повышение и, если Вы сейчас выберете распространенную БД, то в будущем Вы легко найдете себе подчиненного.

    Другой фактор выбора — бесплатность. И тут все упрощается: PostgreSQL vs MySQL. Если учесть, что Oracle очень любит деньги, то можно отдать предпочтение PostgreSQL, но тогда Вы принимаете риск того, что проект PostgreSQL может загнуться от недостаточного финансирования.

    Вот и получается, что мы для стартапа выбрали БД даже не зная как она там будет использоваться :)
    Ответ написан
    1 комментарий