Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » C, С++ | страница 34
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 34 из 37
На страницу: Пред.  1, 2, 3 ... 33, 34, 35, 36, 37  След.    Перейти:   Все страницы
Поиск в этой теме:
Железный канал: «C, С++»
Diff
 708 EGP


Модератор
Рейтинг канала: 8(861)
Репутация: 44
Сообщения: 4179
Откуда: Сферическая Земля в вакууме.
Зарегистрирован: 04.07.2003
ТехноМаг :
Вот давай без этого.

Я не просто так ругаюсь.
Лет уже довольно много назад я работал в конторе писавшей телекоммуникационный софт. Поскольку флеш-память была дорогая а решения обычно встраиваемыми, писали под QNX, еще старый. Но чудо-компилятор watcom 10.6 не знал STL. Поэтому мы написали библиотеку типов сами. Она была хорошая, эта библиотека. Потом память подешевела и мы решили с QNX валить на линукс. Портировали софт, библиотеки, драйвера. А вот библиотеку типов мы выбросили. Хотя там ничего портировать не надо было, она и так работала. Но ни одной причины сохранять эти наработки при имеющейся стандартной библиотеке мы не нашли. Хотя было жалко и были люди которые говорили это же наше родное, смотрите оно на 2% быстрее в написанном мной тесте.
Вот мне и хочется понять логику по которой надо по своей воле отказываться от стандартной библиотеки.

ТехноМаг :
Сойдемся на том, что в STL есть свои минусы.

Давайте все же сперва их озвучим?
Я пока что увидел только аргумент про размер бинарника. Этот аргумент прокатывал 20 лет назад, а уже 15 лет назад на него смотрели косо. Ты серьезно хочешь его приводить? Тогда приведи цифры экономии.
Про лучшую эффективность тоже хочется конкретики. Мой опыт говорит об обратном.

ТехноМаг :
Используешь STL повсеместно? Пожалуйста, никто тебе слова не скажет.

На самом деле все хуже. Последние несколько лет я занимаюсь качеством разрабатываемого софта. И когда я вижу подобные велосипеды на ровном месте - я иду и забиваю разработчику в голову гвоздь. Могу даже дрелью Улыбка. Этого требует моя должностная инструкция. Поэтому я нервно реагирую на пропаганду велосипедостроения. Мне же гвоздей не хватит.
Хотя заставить этих гребаных сишников перестать использовать goto никак не могу. Говорят, не суйся со своими плюсовыми замашками в наш низкоуровневый монастырь Улыбка.

БулерМэн :
Да, кстати использую C99

Ну, осталось понять, зачем ты это делаешь.
_________________
Конец света в конце тоннеля
    Добавлено: 11:57 20-09-2015   
Grebomet
 1460 EGP


Модератор
Рейтинг канала: 8(753)
Репутация: 261
Сообщения: 4765
Откуда: Питербурх
Зарегистрирован: 06.01.2003
Люто, бешно присоединяюсь к вопросу Диффа: Булермэн, зачем тебе именно си, да еще и 99-го стандарту?
Я к тому, что если у тебя есть суровая причина, то в теме резко поубавится срачей на тему "С99/С++ /STL/Qt/велосипед не нужен".
_________________
Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов.
    Добавлено: 13:41 21-09-2015   
Minx
 979 EGP


Модератор
Рейтинг канала: 2(19)
Репутация: 135
Сообщения: 10528
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
ТехноМаг :
STL
Код:

/**  Returns the number of elements in the %list.  */
size_type                                             
size() const                                         
{ return std::distance(begin(), end()); }       


Т.е. вместо сложности O(1) мы получаем O(N). Иногда это бывает критично.

Здесь сложность зависит от реализации. Продвинутые STL (а не узкие) уже имели O(1) давно. А со времен c++11 требование O(1) прописано на уровне стандарта.
_________________
μηδείς αγεωμέτρητος εισίτω

Последний раз редактировалось: Minx (19:03 01-10-2015), всего редактировалось 1 раз
    Добавлено: 19:00 01-10-2015   
Grebomet
 1460 EGP


Модератор
Рейтинг канала: 8(753)
Репутация: 261
Сообщения: 4765
Откуда: Питербурх
Зарегистрирован: 06.01.2003
Minx :
Продвинутые STL (а не узкие) уже имели O(1) давно.

Не знаю, что такое "узкие" STL, но в природе до сих пор полным-полно реализаций со сложностью O(n). Например, у нас до сих пор проект собирается GCC 4.8.5, в котором такая сложность.
С другой стороны, в компиляторе SunPRO сложность была O(1) еще в 1990-х годах.

Кстати о продвинутости. У продвинутых есть проблемка: медленно работающая функция splice(). Так что грабли - везде.
_________________
Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов.
    Добавлено: 20:25 01-10-2015   
Diff
 708 EGP


Модератор
Рейтинг канала: 8(861)
Репутация: 44
Сообщения: 4179
Откуда: Сферическая Земля в вакууме.
Зарегистрирован: 04.07.2003
Я как-то давно решил устроить соревнование компиляторам. Написал какой-то дурацкий тест с циклом на дохреллион операций. Собрал интелом, gcc и сановским. Все на спарке. Запустил.
Интел и гцц выдали какие-то секунды выполнения, интел поменьше, гцц побольше. А сановский выдал ноль. Он весь мой говнотест посчитал еще при компиляции Улыбка.
_________________
Конец света в конце тоннеля
    Добавлено: 20:59 01-10-2015   
Grebomet
 1460 EGP


Модератор
Рейтинг канала: 8(753)
Репутация: 261
Сообщения: 4765
Откуда: Питербурх
Зарегистрирован: 06.01.2003
Кстати да, сановский цомпилятор в плане оптимизаций - молодец. А ежели при компиляции еще и быстрая реализация кой-каких библиотек включена (навскидку вспоминается "быстрый" memcpy) - так и вообще пипец.
Жаль, прикрыли проект.
_________________
Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов.
    Добавлено: 16:03 02-10-2015   
DIMOSUS.X
 995 EGP


Рейтинг канала: 4(58)
Репутация: 188
Сообщения: 3252
Откуда: Vilnius/Minsk
Зарегистрирован: 06.08.2008
Господа, объясните извращенному сишарпом, что это за звездочка в объявлениях?

Код:
IplImage *image = cvQueryFrame( capture );
CvMat* intrinsic_matrix = cvCreateMat(3, 3, CV_32FC1);


Предположительно в первом случае создается объект и переменной присваивается его адрес.
_________________
Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.

Последний раз редактировалось: DIMOSUS.X (02:05 31-12-2015), всего редактировалось 2 раз(а)
    Добавлено: 02:04 31-12-2015   
ТехноМаг
 360 EGP


Рейтинг канала: 2(21)
Репутация: 93
Сообщения: 2510
Откуда: Кронштадт
Зарегистрирован: 09.04.2007
DIMOSUS.X :
бъясните извращенному сишарпом, что это за звездочка в объявлениях?


Патрон для выстреливания в ногу.

DIMOSUS.X :
Предположительно в первом случае создается объект и переменной присваивается его адрес.

И во втором тоже.

Создается экземпляр заданного типа в отдельно выделенном под него участке памяти; выделятся 4 байта на переменную (в другом месте) и туда кладется начальный адрес созданного экземпляра. Получается указатель.

Для наглядности:


_________________
(Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."

Последний раз редактировалось: ТехноМаг (05:05 31-12-2015), всего редактировалось 4 раз(а)
    Добавлено: 04:49 31-12-2015   
Minx
 979 EGP


Модератор
Рейтинг канала: 2(19)
Репутация: 135
Сообщения: 10528
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
DIMOSUS.X :
Предположительно в первом случае создается объект и переменной присваивается его адрес.

Переменная image имеет тип "IplImage*", т.е. указатель на объект типа IplImage.

image занимает size_t байт (4 для 32бит и 8 для 64бит) и храниться на стеке.

Если C++, то объект, на который указывает image, был создан в heap'e оператором new (т.е. динамически). Ответственность за удаление этого объекта лежит на том, кто его получает, т.е. в данном случае на тебе. Т.е. если его никуда не передаешь под другую ответственность, то во избежание утечек его нужно удалить оператором delete

delete image;

C CvMat та же история, только там другой тип.
_________________
μηδείς αγεωμέτρητος εισίτω

Последний раз редактировалось: Minx (09:12 31-12-2015), всего редактировалось 2 раз(а)
    Добавлено: 09:09 31-12-2015   
DIMOSUS.X
 995 EGP


Рейтинг канала: 4(58)
Репутация: 188
Сообщения: 3252
Откуда: Vilnius/Minsk
Зарегистрирован: 06.08.2008
Спасибо.
Положение звездочки разное в этих случаях - несет ли это в себе некий сакральный смысл, или это два варианта записи одного и тогоже?
_________________
Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.
    Добавлено: 09:36 31-12-2015   
Minx
 979 EGP


Модератор
Рейтинг канала: 2(19)
Репутация: 135
Сообщения: 10528
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
С точки зрения смысла и кода одно и то же, звездочка может быть поставлена где угодно:

A * a;
A* a;
A *a;
_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 10:24 31-12-2015   
DIMOSUS.X
 995 EGP


Рейтинг канала: 4(58)
Репутация: 188
Сообщения: 3252
Откуда: Vilnius/Minsk
Зарегистрирован: 06.08.2008
А может тут еще и гуру мэйк файлов есть? Хы...

Есть такой мэйкфайл:
 Cкрытый текст   (кликните здесь для просмотра)

Код:
CCFLAGS=-pipe -pthread -Ofast -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -lwiringPi -lwiringPiDev -lpthread -lm -Wall -I../ -lrf24-bcm -lopencv_core -lopencv_imgproc -lopencv_highgui -l bcm2835

PROGRAM = robot

SOURCES = robot.cpp io.cpp motors.cpp radio.cpp bmp085.cpp I2Cdev.cpp MPU9150.cpp MadgwickAHRS.c Kalman.cpp PID.cpp camera.cpp
OBJS = ${SOURCES:%.cpp=%.o}

.SUFFIXES: .cpp .o

.cpp.o:
   ccache g++ ${CCFLAGS} -c $< -o $@

$(PROGRAM): ${OBJS}
   ccache g++ ${CCFLAGS} ${OBJS} -o $(PROGRAM)
   
clean:
   rm -rf *.o $(PROGRAM)


Как мне научить компилятор сорить *.о файлами в отдельном каталоге?
_________________
Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.
    Добавлено: 21:32 01-01-2016   
AnrDaemon
 858 EGP


Модератор
Рейтинг канала: 8(784)
Репутация: 37
Сообщения: 12292

Зарегистрирован: 17.10.2004
Выучить слово "сборка вне дерева исходников". (Out of tree building.)
_________________
Люблю свободный полёт... :)
    Добавлено: 21:56 01-01-2016   
Diff
 708 EGP


Модератор
Рейтинг канала: 8(861)
Репутация: 44
Сообщения: 4179
Откуда: Сферическая Земля в вакууме.
Зарегистрирован: 04.07.2003
Димосус, а оно тебе точно надо? Там кроме назначения звёздочки человека избалованного шарпом ждёт ещё масса огорашивающих открытий.
_________________
Конец света в конце тоннеля

Последний раз редактировалось: Diff (12:46 02-01-2016), всего редактировалось 1 раз
    Добавлено: 11:41 02-01-2016   
DIMOSUS.X
 995 EGP


Рейтинг канала: 4(58)
Репутация: 188
Сообщения: 3252
Откуда: Vilnius/Minsk
Зарегистрирован: 06.08.2008
Шарп под линуксом это изврат. А вообще нормально, освоился. Главное память за собой чистить Улыбка
_________________
Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.
    Добавлено: 13:21 02-01-2016   
ТехноМаг
 360 EGP


Рейтинг канала: 2(21)
Репутация: 93
Сообщения: 2510
Откуда: Кронштадт
Зарегистрирован: 09.04.2007
DIMOSUS.X :
Шарп под линуксом это изврат.

Ровно такой-же, как и под виндой. Поэтому вопрос таки не снимается.
_________________
(Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
    Добавлено: 13:22 02-01-2016   
Diff
 708 EGP


Модератор
Рейтинг канала: 8(861)
Репутация: 44
Сообщения: 4179
Откуда: Сферическая Земля в вакууме.
Зарегистрирован: 04.07.2003
DIMOSUS.X :
Шарп под линуксом это изврат.

Учитывая -march=armv6zk пожалуй, да.

DIMOSUS.X :
Главное память за собой чистить

Там такого главного - список на страницу. Причем его пункты временами расположены строго ортогонально.

Вот тебе выдержка из старого бояна для поднятия духа
Цитата:

Мы остановились, добившись
успешной компиляции следующего:
Код:
for(;P("\n"),R-;P("|"))for(e=C;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);

Мы не могли даже представить, что современные программисты будут пытаться использовать язык, допускающий подобный оператор!

_________________
Конец света в конце тоннеля
    Добавлено: 14:40 02-01-2016   
DIMOSUS.X
 995 EGP


Рейтинг канала: 4(58)
Репутация: 188
Сообщения: 3252
Откуда: Vilnius/Minsk
Зарегистрирован: 06.08.2008
Diff :
Учитывая -march=armv6zk пожалуй, да.

Теперь уже
Код:
-mcpu=cortex-a7

не разобравшись использовал от первой малины.
А вообще изначально у меня все работало под mono — но глюки с COM портом и pipe достали. Плюс еще своеобразно работающий враппер OpenCV.

А теперь как ты его пишешь, так оно и работает — красота Улыбка Правда кода пока не много, чисто своего 1к строк.
_________________
Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.
    Добавлено: 14:56 02-01-2016   
ТехноМаг
 360 EGP


Рейтинг канала: 2(21)
Репутация: 93
Сообщения: 2510
Откуда: Кронштадт
Зарегистрирован: 09.04.2007
DIMOSUS.X :
как ты его пишешь, так оно и работает


Ну это уже asm какой-то, батенька Ой, не могу!.. Все таки в Си и ++ многие вещи уже автоматизированы (раскидывание нагрузки по ядрам ЦПУ, например). Но по сравнению с #, конечно как небо и земля. Ну и способов выстрелить себе в ногу пропорционально больше.
_________________
(Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."

Последний раз редактировалось: ТехноМаг (22:49 02-01-2016), всего редактировалось 1 раз
    Добавлено: 22:49 02-01-2016   
DIMOSUS.X
 995 EGP


Рейтинг канала: 4(58)
Репутация: 188
Сообщения: 3252
Откуда: Vilnius/Minsk
Зарегистрирован: 06.08.2008
В муках родил вот такой мэйк файл:

 Cкрытый текст   (кликните здесь для просмотра)
Код:
SOURCES = robot.cpp io.cpp motors.cpp radio.cpp bmp085.cpp I2Cdev.cpp MPU9150.cpp MadgwickAHRS.cpp PID.cpp camera.cpp
PROGRAM = robot

CXX = ccache g++
CCFLAGS = -fdiagnostics-color=always -pipe -Ofast -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 -Wall -Wstrict-aliasing=0
INCLUDES = -pthread -lwiringPi -lwiringPiDev -lm -lrf24-bcm -lopencv_core -lopencv_imgproc -lopencv_highgui -l bcm2835
OBJ_DIR = obj/

BUILD_PRINT = \033[1;34mBuilding $<\033[0m
OBJS = ${SOURCES:%.cpp=%.o}

.SUFFIXES: .cpp .o

.cpp.o:
   @echo "$(BUILD_PRINT)"
   @${CXX} ${CCFLAGS} -c $< -o $(OBJ_DIR)$@ ${INCLUDES}

$(PROGRAM): ${OBJS}
   @echo "$(BUILD_PRINT)"
   @${CXX} ${CCFLAGS} ${OBJS:%=$(OBJ_DIR)%} -o $(PROGRAM) ${INCLUDES}
   
clean:
   rm -rf $(OBJ_DIR)*.o $(PROGRAM)

Он сорит объектыми модулями в отдельную дерикторию и не перегружает лишней информацией Улыбка Дает вот такой выхлоп:
 Cкрытый текст   (кликните здесь для просмотра)

_________________
Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.
    Добавлено: 14:20 03-01-2016   
Железный канал: «C, С++»
На страницу: Пред.  1, 2, 3 ... 33, 34, 35, 36, 37  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Мы - это сила, даже если этого пока не видно!!! (Crafter в SW)

  » C, С++ | страница 34
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18