Ответы пользователя по тегу C++
  • Для чего нужны в CPP системные методы _exit, _open, _read, _write, _lseek, _fstat, _link, _unlink, _stat, _close, _execve, _fork, _getpid, _isatty...?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Вот интересно, для кого товарищ Стефано Оливери старался писать комментарий? Там же все черным по-английскио написано. Это - минимальная имплементация функций, которые libc ожидает от системы. Подробнее: раз, два, и уж совершенно конкретно, три. Последнее находится в три клика по ссылке из комментария ))
    Ответ написан
    1 комментарий
  • Как в C++ распределяется память?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Смотря что именно подразумевается под "создать массив" )) Вот хорошая шпаргалка на тему, что это может означать и где он в результате окажется:

    int arr1[100000]; // BSS
    vector<int> arr2; // HEAP
     
    struct DumbStruct {
        int someArr[10000];
    };
     
    int main () {
        int arr3[100000]; // STACK
        vector<int> arr4; // HEAP
        int* arr5 = new int[100000]; // HEAP
        int* arr6 = (int*) malloc(100000 * sizeof(int)); // HEAP
        static int arr7[100000]; // BSS
        DumbStruct struct; // STACK
        DumbStruct* struct2 = new DumbStruct(); // HEAP
        vector<DumbStruct> structarr; // HEAP
        int n;
        scanf("%d", &n);
        int arr8[n]; // STACK (assuming C99 -- this does not compile in C++)
    }


    Если речь именно о динамическом выделении памяти и именно о С++, то есть два варианта: malloc()/free() и new[]/delete[]. Теоретически в случае фрагментации памяти (когда ее, в принципе, достаточно, но не "одним куском") ни тот, ни другой не "заполнит" никаких "свободных" ячеек. malloc() вернет NULL, a new[] кинет std::bad_alloc.

    А практически, конечно, возможно, что угодно... т.к. 1. new - это оператор, и значит, его можно переопределить, 2. с помошью std::set_new_handler ему можно подсунуть свой аллокатор, а также 3. полезет ли new[] вообще к malloc(), строго говоря, не гарантируется и, наконец 4. реализация malloc(), вообще-то, зависит от ОС, а они нынче умные и могут прореагировать как угодно - вплоть до убийства затребовавшего память процесса OOM менеджером.

    Так что, наиболее точный ответ на вопрос: возможны варианты (хорошие и разные)... Однако, если суть вопроса в том, а не получится ли при этом случайно массив, который не массив, то ответ - нет, не получится. Массив, это семантическая конструкция языка. В С++ программист может полагаться на то, что память в массиве непрерывна.
    Ответ написан
    5 комментариев
  • Как декодировать римскую запись числа?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Так же, как любyю другую непозиционную систему счисления... как-то вот так. Читайте, разбирайтесь, пишите свою программку ;)
    Ответ написан
    Комментировать
  • Перехват ввода сканера штрих-кода(в режиме эмуляции клавиатуры) или как забрать ввод с конкретного устройства?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Повторю кэповский вопрос: почему бы просто не переключить сканер в режим RS232 и не забирать данные из СОМ-порта (и через него же, кстати, и программировать сканер, если нужно) ?
    Для этого в Линуксе вообще не нужны никакие спецдрайвера. Если в компе вдруг физически нет RS232, купить копеечный USB адаптер на FTDI чипе - и всех делов :)

    upd:
    cc9bed97ac2b4fa4b03dae0f56313b64.jpg

    1 - Нажимаем
    2 - Заменяем на нужный вариант
    3 - profit :)
    Ответ написан
  • На чем лучше писать музыку?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Ответ написан
    Комментировать
  • Как в DLL скрыть имена экспортированных функций?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Тыц - тыдыц.

    P.S. Только, когда возьмут за одно место, не говорите, что вас не предупреждали о незаконности того, что вы планируете ;)
    Ответ написан
    Комментировать