Работа с похожим кодом в нескольких C "проектах" - PullRequest
1 голос
/ 23 декабря 2009

Я играю с кодом C и пишу небольшой веб-сервер. Цель того, что я делаю, - это написать сервер, используя различные сетевые методы, чтобы я мог узнать о них больше (многопоточность против многопроцессорности против выбора против опроса). Большая часть кода остается прежней, но я бы хотел, чтобы сетевой код можно было «заменить», чтобы провести тестирование производительности с использованием различных методов. Я думал об использовании ifdefs, но похоже, что это быстро испортит код. Есть предложения?

Ответы [ 4 ]

3 голосов
/ 23 декабря 2009

Динамическая загрузка библиотеки? например dlopen в Linux.

Просто создайте API, общий для компонента, который требует динамической загрузки.

2 голосов
/ 23 декабря 2009

Я предпочитаю помещать «условную компиляцию» из исходного кода C / C ++ в make-файлы, т. Е. Иметь одинаковые символы, созданные из нескольких файлов .c / .cpp, но только связывать объекты, выбранные опцией сборки.

Также взгляните на nginx , если вы еще этого не сделали - может дать вам некоторые идеи о реализации веб-сервера.

1 голос
/ 23 декабря 2009

Поместите различные реализации функций, связанных с сетью, в разные файлы .c, имеющие общий заголовок и ссылку на тот, который вы хотите использовать. Начиная с этого, вы можете сделать так, чтобы ваш make-файл создавал x разных исполняемых файлов таким образом для каждой из реализованных вами разных реализаций, так что вы можете просто сказать «make httpd_select» или «make httpd_poll» и т. Д.

Специально для бенчмаркинга, чтобы найти лучший подход, он, вероятно, даст вам более надежные результаты для выполнения на уровне компилятора / компоновщика, чем через разделяемые библиотеки или указатели функций, поскольку это может привести к дополнительным издержкам во время выполнения.

1 голос
/ 23 декабря 2009

Скомпилируйте сетевую часть в свою собственную библиотеку с гибким интерфейсом. Скомпилируйте эту библиотеку по мере необходимости в различные оболочки. Возможно, вам даже удастся найти уже существующую библиотеку, соответствующую вашим требованиям.

...