@ProCxx

Страница 2386 из 2477
Ruslan
28.09.2018
14:41:09
Угу. Помогает не нарушить никаких NDA, но и проблему обсудить

Чаще всего, пока этот пример пишешь, то и осознаешь, где профакапил :D

yuri
28.09.2018
14:54:25
а как заставить его заинлайнить? Потому что я прям на 1000% уверен что он инлайн сам убрал
Вот нашел в своем проекте. Только так. void reset() __attribute((always_inline)); void on_tick() attribute((always_inline)); bool get_fade(uint8_t & r, uint8_t & g, uint8_t & b) attribute__((always_inline)); Возможно, помогло бы тела функций написать в хидере, но из двух зол выбрал такое.

Google
yuri
28.09.2018
15:00:58
проект под attiny, так что да, для gcc исключительно.

Ruslan
28.09.2018
15:01:07
https://en.cppreference.com/w/cpp/language/attributes

Pavel
28.09.2018
15:01:09
Тогда не верю...
да ты чтож, и стэковерфлоу не веришь??!!

https://en.cppreference.com/w/cpp/language/attributes
а, ну с c++17 они игнорятся, ок

Ruslan
28.09.2018
15:02:14
В первую очередь не верь стеку :)

То есть года два уже как:)

http://clang.llvm.org/docs/LanguageExtensions.html#non-standard-c-11-attributes

Шланг не подавится

Про мелкософт не уверен

Pavel
28.09.2018
15:05:25
В первую очередь не верь стеку :)
нет, я так не могу. это слишком.

Ruslan
28.09.2018
15:06:26
Ничего-ничего. Встанешь по колено по самую шею в индусское слоновье данго и сможешь :)

Google
Ilia
28.09.2018
16:10:50
да ты чтож, и стэковерфлоу не веришь??!!
Я же написал все про SO, выше...

Pavel
28.09.2018
16:14:25
Roman
28.09.2018
18:11:29
Есть ли какой-нибудь кросплатформенный способ получить имя функции из указателя?

Играюсь тут с reflection, и понял что это большая проблема

Т.е. если в классе есть указатель на функцию, хочется найти эту функцию в AST

Pavel
28.09.2018
18:13:32
Попробовать питона?

Roman
28.09.2018
18:13:38
Единственный способ который нагуглил - собирать с -rdynamic и дальше backtrace_symbols(). Но это только linux

Попробовать питона?
Нет, мне нужно именно для C++

В MSVC есть похожее https://docs.microsoft.com/en-us/windows/desktop/debug/retrieving-symbol-information-by-address

Но может есть ли какая-нибудь кросплатформенная либа?

Roman
28.09.2018
18:17:50
Для чего именно?
Для работы с таблицой символов

Denis
28.09.2018
18:17:53
Т.е. если в классе есть указатель на функцию, хочется найти эту функцию в AST
интересно что должно произойти если это лямбда какая

Roman
28.09.2018
18:18:37
интересно что должно произойти если это лямбда какая
Мне тоже интересно. Лямбды до недавнего времени даже в отладчике не работали. Но вроде сейчас есть

Denis
28.09.2018
18:19:07
Мне тоже интересно. Лямбды до недавнего времени даже в отладчике не работали. Но вроде сейчас есть
нет, это был вопрос что именно ты ожидаешь в этом случае увидеть в случае лямбды

Roman
28.09.2018
18:20:08
нет, это был вопрос что именно ты ожидаешь в этом случае увидеть в случае лямбды
Мне нужен какой-то способ найти эту лямбду в исходном коде/ ast. Как лямбды реализованы на практике я ещё не знаю.

Т.к. у лямбды нет имени, возможно её найти в принципе невозможно

Т.е. она не линкуется

Denis
28.09.2018
18:21:31
Мне нужен какой-то способ найти эту лямбду в исходном коде/ ast. Как лямбды реализованы на практике я ещё не знаю.
ты вот уверен что тебе это и правда нужно? У меня ощущение что ты решаешь какую-то другую задачу. Мне сложновато представить зачем может быть нужно имя функции, куда указывает указатель

Google
Евгений
28.09.2018
18:22:37
Можешь мне пожаловаться:)
Ты тоже там работаешь? Го в линк тогда?

Roman
28.09.2018
18:22:56
Я пишу транслятор из C++ в Verilog с динамической элаборацией на основе рефлекшна.
сейчас пользователь явно должен передовать имя функции в виде строки, чтобы я её мог найти в ast. выглядит убого.

Roman
28.09.2018
18:24:16
сейчас пользователь явно должен передовать имя функции в виде строки, чтобы я её мог найти в ast. выглядит убого.
Как решение под linux можно собирать с -rdynamic и искать получить имя замангленное имя функции из backtrace_symbols. Но не кроссплатформенно получается

Roman
28.09.2018
18:33:15
А boost.stacktrace вам не подойдет?
Интересно. https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/getting_started.html#stacktrace.getting_started.getting_function_information_fro

Надо пробовать

Евгений
28.09.2018
18:34:24
Короче, ребят, есть метод data_to_val_aux. Он используется в библиотеке только один раз, и он не статический. [[gnu::always_inline]] value_t inline __attribute__((always_inline)) data_to_val_aux(size_t index, size_t swath_length) {...} Он в цикле вызывается много раз (538 229 983). Я измеряю время выполнения, это где-то 9.3 секунд. Флаги компиляции: -mtune=native -march=native -mavx2 -pipe -g -O3 -DNDEBUG. Вот эти флаги пробовал выключать и включать: -fearly-inlining -finline-limit=10000000 -funit-at-a-time. Теперь я беру, и руками делаю инлайн этого метода. Результат - 5.4 секунды. Собственно вопрос: как сделать так, что бы инлайн работал?

Alexander
28.09.2018
18:34:34
А boost.stacktrace вам не подойдет?
Но это же не то, что он хочет, как я понимаю

Denis
28.09.2018
18:34:53
А boost.stacktrace вам не подойдет?
я сначала решил что это ответ к Скиттлс

Anton
28.09.2018
18:35:12
Но это же не то, что он хочет, как я понимаю
Вот скинули ссылку где судя по всему можно выцепить название из указателя

Roman
28.09.2018
18:35:55
Интересно, что boost::stacktrace выведет в случае лямбды )

Anton
28.09.2018
18:38:52
Roman
28.09.2018
18:39:47
Что нибудь типа ::<lambda()>:92
Ну как понимаю чтобы это вывести ему нужна дебаг информация

А для обычных символов достаточно собрать с -rdynamic

Roman
28.09.2018
18:42:39
Ну как понимаю чтобы это вывести ему нужна дебаг информация
Хотя видимо дебаг информация это лучший вариант для меня

Anton
28.09.2018
18:44:10
Хотя видимо дебаг информация это лучший вариант для меня
Обратите внимание, что он по разнмоу работает в зависимости от того, с какими либами линкуете

Google
Anton
28.09.2018
18:45:10
Хотя видимо дебаг информация это лучший вариант для меня
https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html

Pavel
28.09.2018
18:47:09
Всё же мне кажется, задача решается неподобающим образом, или выбран не тот язык.

Roman
28.09.2018
18:47:28
Всё же мне кажется, задача решается неподобающим образом, или выбран не тот язык.
Нет, это промышленный стандарт. Используется каждой второй semiconductor компанией

Alexander
28.09.2018
18:48:19
Да, уже прочитал
А твой транслятор опен сорс.

?

Roman
28.09.2018
18:48:49
А твой транслятор опен сорс.
Пока нет. Но может разрешат опенсорснуть

Alexander
28.09.2018
18:49:11
Pavel
28.09.2018
18:49:56
Нет, это промышленный стандарт. Используется каждой второй semiconductor компанией
В продукте нашей semiconductor компании с десяток языков задействован.

Roman
28.09.2018
18:50:37
Ну да, зоопарк. Но синтез железа из c++ много где используется

Ilia
28.09.2018
19:27:14
Есть ли какой-нибудь кросплатформенный способ получить имя функции из указателя?
Имя функции это и есть указатель. Сравни указатель со всеми именами функций, на равенство, где равно, там и будет твоя функция. По другому никак

Roman
28.09.2018
19:27:58
Это не С++вообще
В C++ это вообще невозможно. Boost::Stacktrace это тоже не C++

Евгений
28.09.2018
19:33:24
А что внутри функции то?
https://github.com/scanmem/scanmem/blob/master/targetmem.h#L257 Правда я переписываю на с++, но функция не изменилась вообще. Только как метод её сделал для 'swath'

Ilia
28.09.2018
19:37:02
Вопрос лишь в том где взять этот список функций :)
Да нет их Во-первых ты сейчас видишь после rdynamic лишь список глобальных и экспортируемых функций. Статические и неглобальные - нет. Во-вторых, Блин не знаю уже что во вторых, но какие-то жопы ещё найдутся . В общем это тете надо что-то типа плагина к костру писать

Google
Евгений
28.09.2018
19:39:36
Которая функция то?
Она и вызывается 500 миллионов раз

Если её в коде заинлайнить, т.е. её вызов заменить на её содержимое, то производительность увеличится. И ещё заметил, что с флагом О2 быстрее

Евгений
28.09.2018
19:43:17
Ты посмотрел, что именно генерируется?
Блин, я плохо в этих ваших ассемблерах шарю

Ilia
28.09.2018
19:43:30
Она и вызывается 500 миллионов раз
Кто она то? Как функция называется?

Alexander
28.09.2018
19:43:34
Блин, я плохо в этих ваших ассемблерах шарю
Ну значит получи асм и скинь сюда

Но не находить call в асме - сильно :)

Страница 2386 из 2477