• В чем различие между объявлением с new и без него?

    @Mercury13
    Программист на «си с крестами» и не только
    ПОЛОЖЕНИЕ В ПАМЯТИ
    Без new: static/глобальная — в сегменте данных, локальная — на стеке. В сегменте данных память отводится при компиляции линковке, создать стековый фрейм — две команды процессора.
    С new: в куче. Управление кучей — довольно сложная задача, и если этих new много, программа может начать тормозить.

    ВРЕМЯ ЖИЗНИ
    Без new: объект живёт, пока выполнение находится в данном блоке. При выходе из блока автоматически срабатывает деструктор.
    С new: уничтожаем, когда хотим.

    ИМЕНОВАНИЕ
    Без new: объект привязан к своему имени.
    С new: объект безымянный (имя только у указателя). Потому возможны структуры данных переменного размера: динамические массивы, связанные списки, деревья и прочее.

    РАЗМЕР
    Без new: задан при компиляции. То есть массив на 10 позиций, и точка, больше — только перекомпиляцией.
    С new: произвольный.
    Ответ написан
    Комментировать
  • Зачем нужны прототипы в C++?

    1) В заголовочном файле могут быть объявлены типы данных, прототипы функций, само тело функции, шаблоны. Всё это может быть объявлено и в cpp.
    2) Этим занимается линкер.
    3) Это одна из причин. Вторая - разрешение проблем видимости.
    Например попробуйте написать без прототипов взаимно рекурсивные функции.
    4) Нет
    5) Нет
    Ответ написан
    6 комментариев
  • Зачем нужны прототипы в C++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    1)Заголовочные файлы: в них собраны прототипы функций библиотек?(и все?)

    Содержимое заголовочного файла просто подставляется в то место где написано #include. Поэтому туда можно поместить всё что угодно. Традиционно библиотеки помещают туда объявления классов, функций и глобальных переменных и определения макросов.

    2)Как компилятор находит нужные встроенные функции по прототипам если мы не включаем в cpp файл библиотеки а лишь подключаем заголовочный файл с помощью #include?

    Компилятор их не находит. Не его это работа. Он просто помещает в объектный код вызовы ссылающиеся на внешние символы. Во время линковки объектных файлов в исполняемый файл линковщик находит все вызванные функции в библиотеках которые ему передали для линковки.

    3)Я так понимаю прототипы в C++ нужны для того чтобы компилилось быстрее?

    Прототипы нужны чтобы компилировалось вообще. Нельзя вызвать функцию о которой неизвестно вообще ничего.

    4)Заголовочные файлы представляют из себя уже откомпиленый код?(объектный)

    Нет, это обыкновенные текстовые файлы с исходным кодом. Содержимое заголовочного файла просто подставляется в то место где написано #include. Открой один для интереса и почитай.

    5)Тот же вопрос что и в 4 только уже про библиотеки

    Да. Статическая библиотека -- это архив объектных файлов. Динамическая библиотека -- это собранные линковщиком вместе объектные файлы.
    Ответ написан
    3 комментария
  • Почему функция rand() возвращает одно и то же значение?

    Раз уж у вас C++, то от использования rand() вообще лучше отказаться и пользоваться более точной C++-ной либой <random>:

    // Важно: создание этого объекта занимает некоторое время,
    // его лучше использовать для генерации всех случайный чисел
    std::default_random_engine engine(std::random_device()());
    
    // Легковесный объект-диапазон для генерации целых чисел
    // В std есть и куча других полезных распределений
    std::uniform_int_distribution<int> distribution(min,max);
    
    for (int i = 0; i < N; ++i) {
        int random_number = distrubution(engine);
        std::cout << random_number << std::endl;
    }
    Ответ написан
    Комментировать
  • Почему функция rand() возвращает одно и то же значение?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    По-тому что seed все время одинаковый. (и, к стати, это крайне удобно для отладки).

    This number is generated by an algorithm that returns a sequence of apparently non-related numbers each time it is called. This algorithm uses a seed to generate the series, which should be initialized to some distinctive value using function srand.


    www.cplusplus.com/reference/cstdlib/rand
    Ответ написан
    Комментировать
  • Почему функция rand() возвращает одно и то же значение?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    небыла

    не было.
    Даже так?
    while(true)
    std::cout << rand() << std::endl;

    Почитайте про генераторы псевдослучайных чисел, вероятно вы не меняете seed, поэтому генератор при каждом запуске выдаёт то же значение.
    В простейшем случае нужно в начале программы делать
    srand(time(0));
    Это инициализирует псевдослучайную последовательность текущим временем(количество секунд с 1 января 1970)
    Ответ написан
    2 комментария
  • Что означает "+" после регистра?

    @Mercury13
    Программист на «си с крестами» и не только
    Перед нами синтаксис ассемблера Intel.
    qword ptr [] — адрес восьмибайтовой переменной в памяти. Если конкретный — прямая адресация, если внутри какой-то регистр — косвенный.
    + — простая операция сложения.

    Перед нами косвенная адресация со смещением. То есть, берём содержимое регистра eax, прибавляем 80h, обращаемся по этому адресу и то, что получилось, загоняем в стек сопроцессора как double.

    ЗЫ. Подобный полный показ команд с ведущими нулями и без указателя 16-й системы (80h) обычно используется в дизассемблерных листингах.
    Ответ написан
    3 комментария
  • Как процессор работает с памятью?

    @Mercury13
    Программист на «си с крестами» и не только
    1. Для косвенной адресации. Мы не просто обращаемся к 325-й ячейке, а проводим вычисление, получаем 325 и обращаемся к ячейке с этим номером. Получили бы 456 — обратились бы к 456-й.
    Это даёт кучу интересных структур данных, и самая простая из них — массив.

    Многоуровневый указатель — это уже дело более высокого уровня. Пока указателем я называл просто адрес в памяти. Но, извините, в памяти хранятся однобайтовые целые, двухбайтовые целые, дробные, массивы, строчки, другие указатели — в общем, на более высоком уровне появляется понятие «тип данных». И указатели бывают на целое, на дробное — и на указатель!

    2. Разница между каким-то адресом и началом структуры данных. Например, у нас есть такая структура данных (для простоты без выравнивания).
    a : word
    b : dword
    c : byte

    Тогда поле c находится по смещению 2+4 = 6, и если голова структуры по адресу 124, то поле c будет по адресу 124+6=130.

    Также в стандартном режиме 8086 — 16-битный процессор с 1 мегабайтом адресуемой памяти — была хитрая система адресации под названием «сегмент:смещение», и адрес вычислялся по формуле сегмент·16 + смещение. При этом было принято считать, что сегмент незыблем, а по структуре данных (которая при этом не могла превышать 64K) мы двигались, меняя смещение.

    3. Т.н. «переключение контекста» — ядро ОС просто сохраняет регистры в памяти. Очень долгая задача, кстати.
    Ответ написан
    Комментировать
  • Запуск и остановка скриптов с циклом?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Запустить просто так я его не могу (запускаю его я на хостинге через ssh) потому что как только я закрою консоль - скрипт завершает работу.

    в конце строчки запуска скрипта ставьте &, тогда скрипт будет выполняться в фоновом режиме
    Ответ написан
    Комментировать
  • Запуск и остановка скриптов с циклом?

    1. Чтобы скрипт продолжил выполнение после отключения от консоли, его необходимо запустить в фоне через nohup. Например так: nohup php ./myscript.php &
    2. Используя в PHP функцию getmypid, получите id процесса, сохраните в pid-файл и убивайте только этот процесс.
    Ответ написан
    Комментировать
  • Запуск и остановка скриптов с циклом?

    LeeMasagos
    @LeeMasagos
    E-commerce
    Чтоб при закрытии консоли не вылетал процесс надо запускать от пользователя
    ssh user@000.000.000.00 'Тут ваша команда'
    Ответ написан
    Комментировать
  • Как использовать нужную версию питона?

    LazyTalent
    @LazyTalent
    Data Engineer, Freelancer
    Чтобы использовать без виртуального окружения:
    1. Установить pip для python2 и python3:
    sudo apt install python-pip python3-pip
    2. Установка библиотек:
    sudo -H pip2 install lib_name
    или
    sudo -H pip3 install lib_name

    Под virtualenv:
    1. Создать виртуалку:
    virtualenv -p python2 venv
    или
    virtualenv -p python3 venv
    2. Активировать:
    source venv/bin/activate
    3. Установить либы:
    pip install lib_name1 lib_name2
    4. Создать файл с зависимостями
    pip freeze > requirements.txt
    Ответ написан
    3 комментария
  • Как исполнять root-level команды с PHP?

    R0dger
    @R0dger
    Laravel/Yii/2 AngularJs PHP RESTful API
    смотрите в сторону shell-exec
    + sudo. Но я бы не рекомендовал такой подход. вы практически добавляете уязвимость, злоумышлениик меняет Ваш скрипт, а вы его запускаете от root
    Ответ написан
  • Что означает Host в http заголовках?

    Веб-сервер, к которому приходит запрос, может потенциально обрабатывать много сайтов. И ему нужно знать, к какому сайту вы сейчас обращаетесь. Для этого он анализирует это поле, чтобы, грубо говоря, понять, в какую папку ему лезть за файлами. Если поле не задано, то веб-сервер будет действовать в зависимости от своих настроек (например, выдать данные от сайта, заданного по-умолчанию, или выдать ошибку доступа).
    Ответ написан
    Комментировать
  • Как узнать количество секунд во времени (строке)?

    DevMan
    @DevMan
    если формат фиксированный, то можно регуляркой ideone.com/9u8IXh
    или осилить DateTime

    а вообще в пыхе есть волшебная функция ideone.com/8ePSVo
    Ответ написан
    1 комментарий
  • Что возвращает strtotime() в данной ситуации?

    DevMan
    @DevMan
    нельзя просто так взять и самому проверить!!!!!!!11адын

    Возвращает временную метку в случае успеха, иначе возвращается FALSE. До версии PHP 5.1.0 в случае ошибки эта функция возвращала -1.
    php.net/manual/ru/function.strtotime.php

    var_dump(strtotime(date("H-i-s"))); // false
    Ответ написан
    Комментировать
  • Почему не срабатывает условие?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Манипуляции с куками и сессией могут быть осуществлены только до отправки заголовков(упрощено до вывода первой строчки в браузер), по этому условие выполняется, но код внутри исполнен не будет если перенести его ниже под хтмл. Легко проверить поменяв код на такой:
    <?php
      session_start();
      require_once("config.php");
    
    
    if(isset($_GET['login']))
    {
        echo "хрен вам, а не куки!";
        $obj->logIN($_COOKIE['PHPSESSID']);
    }
    
    <!DOCTYPE html>
    ...

    теперь и до и после хтмл тегов ечо будет выводиться, и работать код не будет уже в обоих местах )
    Ответ написан
    Комментировать
  • Почему не выполняется запрос к MySQL?

    Melkij
    @Melkij
    PostgreSQL DBA
    fatal error, с чего бы тут чему-то выполняться?
    Или чего-то недоговариваете.
    Ответ написан
    5 комментариев
  • Следует ли закрывать подключение к MySQL?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    закрывать соединение нет необходимости, при завершении работы скрипта гарбажколлектор автоматически очищает соединение. Соответственно у вас лишний код, лишнее движение, неявное поведение, кароче все плохо. Если в будущем у вас на данной стадии скрипт не закончится, проблему с внезапной потерей связи с базой будет найти не очень просто.
    Ответ написан
    1 комментарий