The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск языка программирования Rust 1.46"
Отправлено Ordu, 29-Авг-20 00:00 
> Да, да, спасибо. Одна строка, три инта разделённых пробелами, завершается новой строкой.
> Эта штука вызывается для каждого процесса (которых спавнится тысячи подряд) и
> инлайнится, и уж точно я хочу избежать isdigits и isspace,

Ты сначала напиши, померь скорость, а потом думай где тормозит. Если ctype.h будет слишком медленным, напишешь свои аналоги. Заинлайнишь. Будет тебе щщасте.

> и scanf (довольно вредная дрянь, 99% времени я провишу в ней).
> А можно же изменять инты, выделенные кем-то другим? Это именно то,
> что я пытаюсь сделать. Как я ни пробовал выделять инты на
> хипе (malloc и передать 3 указатель на 3 указателя на инты
> емнип), компилятор был недоволен (хотя и работало).

Эмм... Ты пытаешься избежать isdigits и isspace, но при этом думаешь о динамическом выделении памяти? Если тебе нужна скорость, кучу надо выкидывать в первую очередь.

Но если тебе очень надо, то:


int main() {
    unsigned *arr = malloc(3 * sizeof(unsigned));
    char* bufs[] = {
        "1 2 3", "    12\t398746 \n 2397\n\n",
        "12345", "1 2, -100"

    };
    for(size_t i = 0; i < sizeof(bufs)/sizeof(bufs[0]); i ++) {
        int ret = get_vals(bufs[i], arr);
        printf("ret: %d; vals: (%u, %u, %u)\n", ret, arr[0], arr[1], arr[2]);
    }
    return 0;
}

УМВР


upd.

Или тебе нужен массив указателей на инты? Ты в курсе что это _ещё_ хуже, с точки зрения производительности? Если да, то смотри:

int get_vals(const char *buf, unsigned* var[3]) {
     /// ...
     *var[i] = чему-то-там
     /// ...
}

int main () {
    unsigned **arr = malloc(3 * sizeof(unsigned));
    unsigned a, b, c;
    arr[0] = &a;
    arr[1] = &b;
    arr[2] = &c;
        /// ...
                printf("ret: %d; vals: (%u, %u, %u)\n", ret, *arr[0], *arr[1], *arr[2]);
}

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру