С/С++ Portal | Программирование
Присоединяйтесь к нашему каналу и погрузитесь в мир для C/C++-разработчика Сотрудничество, реклама: @devmangx Менеджер: @Spiral_Yuri РКН: https://clck.ru/3Foc4d
Mostrar más📈 Análisis del canal de Telegram С/С++ Portal | Программирование
El canal С/С++ Portal | Программирование (@cpportal) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 15 357 suscriptores, ocupando la posición 8 493 en la categoría Tecnologías y Aplicaciones y el puesto 43 654 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 15 357 suscriptores.
Según los últimos datos del 09 junio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -185, y en las últimas 24 horas de -14, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 13.02%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 7.59% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 2 001 visualizaciones. En el primer día suele acumular 1 166 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 17.
- Intereses temáticos: El contenido se centra en temas clave como linux, ядро, c++, процессор, указатель.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Присоединяйтесь к нашему каналу и погрузитесь в мир для C/C++-разработчика
Сотрудничество, реклама: @devmangx
Менеджер: @Spiral_Yuri
РКН: https://clck.ru/3Foc4d”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 10 junio, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
nginx/src/core/ngx_palloc.c
👉 @CpportalImages/, документы в Documents/, видео в Videos/ и так далее.
👉 @Cpportal/proc/sys/fs/binfmt_misc/ вида: «При встрече файла с таким magic number передавать его определённому интерпретатору», то ядро автоматически передаст выполнение этому интерпретатору.
По сути, это тот же механизм, что и shebang #!/bin/bash, только сопоставление выполняется не по первой строке файла, а по сигнатуре бинарного заголовка.
Изначально этот механизм использовался для того, чтобы Linux мог напрямую «запускать» Java class-файлы и Windows PE-исполняемые файлы. Позже QEMU использовал его для реализации пользовательской эмуляции между архитектурами: запуск x86 ELF-бинарников на ARM Linux, где ядро автоматически вызывало qemu-x86_64 для трансляции.
Затем появился Apple Silicon.
Когда на Mac с Apple Silicon вы запускаете Linux VM через Colima или Lima (использующие Virtualization.framework в macOS) и включаете rosetta: true, происходит следующее:
macOS монтирует бинарник-транслятор Rosetta внутрь Linux VM по пути /mnt/lima-rosetta/rosetta через virtio-fs.
Внутри VM регистрируется обычное правило binfmt_misc: при обнаружении x86_64 ELF-сигнатуры (7f454c46...02003e00) передавать выполнение /mnt/lima-rosetta/rosetta.
После этого любой запуск x86_64-бинарников внутри VM автоматически перехватывается ядром и передаётся Rosetta для трансляции.
Для контейнеров всё выглядит полностью прозрачно.
Команда:
docker run --platform linux/amd64 nginx
-скачивает x86-образ, процессы внутри контейнера являются x86 ELF-бинарниками, а ядро Linux автоматически запускает трансляцию через Rosetta с помощью binfmt_misc.
Сам контейнер даже не подозревает, что происходит за кулисами.
Сравнение производительности:
Подход с Rosetta: около 70–90% от нативной производительности (JIT-трансляция и оптимизация на уровне инструкций). Подход с полной виртуализацией через QEMU: примерно 10–30% от нативной производительности (полная эмуляция x86-процессора).Механизм ядра, созданный в 1997 году для запуска Java class-файлов, в 2024 году стал одним из ключевых элементов инфраструктуры для запуска x86-контейнеров на Apple Silicon. Иногда самые долговечные архитектурные решения оказываются самыми простыми и универсальными абстракциями.
$ colima ssh $ cat /proc/sys/fs/binfmt_misc/rosetta enabled interpreter /mnt/lima-rosetta/rosetta flags: OCF magic 7f454c4602010100000000000000000002003e00👉 @Cpportal
fork, exec, пайпы, сигналы)
• свой malloc/free
• монитор процессов через /proc
• рекурсивный обход файловой системы
• HTTP-сервер на сокетах
• многопользовательский чат через TCP и select()
• пакетный менеджер с распаковкой tar.gz
Парень собрал весь этот набор с нуля, без сторонних библиотек.
Самое интересное, что это не учебные проекты ради галочки. Всё идёт в EduOS — offline-first ОС с ИИ для школ в Африке.
Нравится такой подход. Вместо бесконечных туториалов по очередному JS-фреймворку человек просто сел и начал разбирать фундаментальные вещи.
Следующий этап у него — ассемблер.
https://github.com/MonarchCorps
👉 @Cpportal➕ Направленный ациклический граф в PostgreSQL: как мы научили реляционную базу хранить оргструктуру на 500 000 пользователей. Малик Минубаев, разработчик в B2B-платформе, рассказал, почему стандартные паттерны хранения иерархий не работают для ориентированного ациклического графа. А также сравнил несколько вариантов Closure Table с бенчмарками на реальной нагрузке
➕ Как Яндекс Диск выдерживает сотни гигабит входящего трафика: устройство балансировки загрузок. Илья Абрамов, разработчик в Диске, разобрал, почему нам не подошёл подход «как у всех», и показал эволюцию алгоритма балансировки загрузок: от наивного Round-Robin до разработки собственного алгоритма
➕ Как формировать технологический стек и не погибнуть в священных войнах: от хаоса к процессам и техрадару. Дмитрий Сафонов, руководитель команды разработки платформы микросервисов, рассказал, как строить стек для промышленной разработки и разрешать споры о технологиях. А также поделился опытом внедрения Техрадара в Яндекс 360
➕ Зачем и как бэкендеру расти в карьере в 2026 году. Дмитрий Соломонов, руководитель группы B2B-разработки бэкенда Диска, рассказал, как развивать команду с помощью индивидуальных планов и выбора узкой специализации для разных уровней разработчиков. И поделился, как связать получение знаний с реальными задачами
➕ Семь раз подумай, один раз пошардируй: как мы начали горизонтально масштабировать метаданные чатов Телемоста. Никита Звонарев, разработчик в Мессенджере, рассказал, что может предпринять команда, когда вертикально масштабироваться уже не получается, а сервису нужно функционировать дальше в условиях возрастающей нагрузки, и как при этом не устроить себе проблемы в будущем🎤 Плейлист доступен на YouTube и в VK Видео
// xv6 kernel kernel/pipe.c piperead
int
piperead(struct pipe *pi, uint64 addr, int n)
{
int i;
struct proc *pr = myproc();
acquire(&pi->lock);
while(pi->nread == pi->nwrite && pi->writeopen){
if(killed(pr)){
release(&pi->lock);
return -1;
}
sleep(&pi->nread, &pi->lock); // wait until a writer adds data
}
for(i = 0; i < n; i++){
if(pi->nread == pi->nwrite)
break;
pi->data[pi->nread++ % PIPESIZE]; // consume one byte from the ring buffer
}
wakeup(&pi->nwrite); // writers may have space now
release(&pi->lock);
return i;
}
https://pdos.csail.mit.edu/6.828/2025/xv6/book-riscv-rev5.pdf
👉 @Cpportal// isr.c - called straight from the assembly interrupt entry code
typedef struct registers {
u32int ds;
u32int edi, esi, ebp, esp;
u32int ebx, edx, ecx, eax;
u32int int_no, err_code;
u32int eip, cs, eflags, useresp, ss;
} registers_t;
void isr_handler(registers_t regs) {
monitor_write("received interrupt: ");
monitor_write_dec(regs.int_no);
monitor_put('\n');
}
// assembly stub saves CPU state into this struct first
// handler just gets a snapshot of the registers at interrupt time
// handy for debugging when you're bringing up the kernel.
В ней разбирается настоящий isr_handler из туториала. Именно эта функция вызывается каждый раз, когда срабатывает прерывание.
Достаточно взглянуть на неё один раз, чтобы понять базовый механизм работы прерываний.
Структура registers напрямую соответствует значениям, которые процессор сохраняет в стек при возникновении прерывания.
На этом и строится вся схема:
• процессор сохраняет текущее состояние
• передаёт управление обработчику прерывания
• обработчик анализирует сохранённые данные
• после завершения управление возвращается к прерванному коду
Всё просто. Процессор сохраняет контекст, вызывает ваш код и затем продолжает выполнение с того места, где остановился.
• многозадачность
• пользовательский режим (user mode)
Каждая глава содержит рабочий код, который можно скомпилировать, запустить в QEMU и самостоятельно поэкспериментировать с внутренним устройством операционной системы.
https://web.archive.org/web/20160412174753/http://www.jamesmolloy.co.uk/tutorial_html/index.html
👉 @CpportalWe can process data faster than ever, but we can't get that data faster.Процессоры становятся всё быстрее. Память тоже становится быстрее, но разрыв между скоростью CPU и скоростью доступа к данным продолжает оставаться огромным. Поэтому во многих случаях производительность упирается не в количество инструкций и не в сложность алгоритма. Она упирается в то, насколько эффективно ваша программа получает данные из памяти. После этой главы многие вещи вроде cache misses, data-oriented design, SoA vs AoS и производительности циклов начинают выглядеть намного понятнее. 👉 @Cpportal
restrict
Оно сообщает компилятору, что два указателя не алиасируют друг друга, то есть никогда не ссылаются на пересекающиеся области памяти.
Эта дополнительная информация даёт оптимизатору больше свободы и часто позволяет применять SIMD-векторизацию.
Без restrict компилятор вынужден предполагать, что запись через один указатель может повлиять на данные, которые читаются через другой указатель.
С restrict он знает, что указатели независимы, и может генерировать инструкции AVX и SSE, которые в противном случае были бы небезопасны.
Это одна из причин, почему memcpy() можно оптимизировать агрессивнее, чем memmove().
memcpy() объявлена с указателями, квалифицированными через restrict, тогда как memmove() обязана корректно работать с перекрывающимися областями памяти.
restrict был добавлен в стандарт C99 в 1999 году.
GCC поддерживает его уже много лет как через restrict, так и через __restrict__.
Если вы точно знаете, что ваши указатели никогда не пересекаются, но не сообщаете об этом компилятору, то можете терять производительность SIMD-оптимизаций.
👉 @Cpportal
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
