Автор Тема: си плюс плюс  (Прочитано 9166 раз)

Оффлайн LanuHum

  • Житель
Re: си плюс плюс
« Ответ #45 : 01 Ноябрь 2016, 19:52:26 »
ладно... давай так...
Чем является "указатель" в языке Си?
Указатель является числом (по-моему, шестнадцатеричной системы исчисления), указывающим на ячейку памяти, которую я занял, создав переменную.

Оффлайн Samovar

  • Житель
Re: си плюс плюс
« Ответ #46 : 01 Ноябрь 2016, 19:57:48 »
ладно... давай так...
Чем является "указатель" в языке Си?
Указатель является числом (по-моему, шестнадцатеричной системы исчисления), указывающим на ячейку памяти, которую я занял, создав переменную.
почти попал :) указатель   является адресом НАЧАЛЬНОЙ ячейки памяти в которой что-то хранится... но блин, непонятно чито тамо хранится, т.к. одна ячейка памяти - это один байт, но дальше идут другие байты... потому указывается тип ( размерность переменной... или сколько следующих байт используется)... ясно? ...там может хранится и адрес функции  (подпрограммы) в памяти... да и пофиг что :)  ...Архитектура фон Неймана —принцип совместного хранения команд и данных в памяти компьютера. Знаешь что прикольно, что ты этот мусор из данных (переменных) тоже можешь запустить, оперируя в машинном коде... можешь сделать самомодифицируемый код (прогу, которая сама себя "пишет" и исполняет)... врубайся :) надеюсь, всё-таки я до тебя достучался....
« Последнее редактирование: 01 Ноябрь 2016, 20:19:51 от Samovar »

Оффлайн LanuHum

  • Житель
Re: си плюс плюс
« Ответ #47 : 01 Ноябрь 2016, 20:17:53 »
ладно... давай так...
Чем является "указатель" в языке Си?
Указатель является числом (по-моему, шестнадцатеричной системы исчисления), указывающим на ячейку памяти, которую я занял, создав переменную.
почти попал :) указатель   является адресом НАЧАЛЬНОЙ ячейки памяти в которой что-то хранится... но блин, непонятно чито тамо хранится, т.к. одна ячейка памяти - это один байт, но дальше идут другие байты... потому указывается тип ( размерность переменной... или сколько следующих байт используется)... ясно? ...там может хранится и адрес функции  (подпрограммы)в памяти... да и пофиг что :)
Мне ясно, что char - 1, short - 2, int - 4, double - 8. Если создаём массив, указываем число объектов и тип. Умножаем, получаем.
sizeof выдаёт размер. sizeof(float), sizeof(long long)...

Оффлайн Samovar

  • Житель
Re: си плюс плюс
« Ответ #48 : 01 Ноябрь 2016, 20:23:53 »
ну и что ты думаешь делает компилятор Си, когда ты написал функцию и обозвал её?
он просто пишет в машинном коде:
Call [адрес функции в памяти]
...в натуральном машинном коде глупо писать, достаточно ассемблерной мнемоники :)

Оффлайн LanuHum

  • Житель
Re: си плюс плюс
« Ответ #49 : 01 Ноябрь 2016, 20:31:33 »
ну и что ты думаешь делает компилятор Си, когда ты написал функцию и обозвал её?
он просто пишет в машинном коде:
Call [адрес функции в памяти]
 :)
Ой! Я об этом даже не догадывался! :)
Ну, дальше...

Оффлайн Samovar

  • Житель
Re: си плюс плюс
« Ответ #50 : 01 Ноябрь 2016, 20:37:07 »
Ну а дальше   у проца есть регистры...
Регистр IP (счётчик команд) указывает на адрес в памяти, где лежит команда к процессору... и ещё есть стэк :) тамо хранятсо все локальные переменные функций...


Оффлайн LanuHum

  • Житель
Re: си плюс плюс
« Ответ #51 : 01 Ноябрь 2016, 20:41:53 »
Ну а дальше   у проца есть регистры...
Регистр IP (счётчик команд) указывает на адрес в памяти, где лежит команда к процессору... и ещё есть стэк :) тамо хранятсо все локальные переменные функций...
Это то, что поможет мне заставить рендерер брать данные не из файла, а из интерпретатора Python?

Оффлайн Samovar

  • Житель
Re: си плюс плюс
« Ответ #52 : 01 Ноябрь 2016, 20:44:47 »
 Python - интерпретатор , т.е. набор подпрограмм (читай лажа по скорости), он  не сможет быстро работать никогда...
читай данные из файла... лучше бинарника... меньше объём, соответственно, быстрее доступ... но если сможешь, то лучше читай напрямую из памяти- это наилучший вариант :)
и если действительно хочешь, чтобы было быстро, то изучи ассемблер - это родной язык процов, хотя, увы достаточно трудносовместимый... хотя, компиляторы Ст чё-та пырхаются... но не всегда удачно :)
« Последнее редактирование: 01 Ноябрь 2016, 21:01:20 от Samovar »

Оффлайн LanuHum

  • Житель
Re: си плюс плюс
« Ответ #53 : 01 Ноябрь 2016, 20:59:43 »
Python - интерпретатор , т.е. набор подпрограмм (читай лажа по скорости), он  не сможет быстро работать никогда...
Это тут каким боком? Блендер использует питон для создания файла сцены посредством скрипта экспорта, стало быть это факт, от которого нам не уйти никуда. Хотим мы или нет, но без питона, не влезая в код самого блендера, файл сцены мы не создадим ни для люкса, ни для яфы, ни для поврея, ни для кого, вообще. Но, если мы посмотрим правильно, то увидим, что время отнимает у нас ни столько питон, сколько сама запись в файл, как и вывод в консоль. Даже на С программа считает 100 миллисекунд, а, если захотим видеть результат в консоли, то уйдёт минута, три, пять...
Другая сторона медали - парсер. Бесконечные сравнения, приведения... Одно дело объявить а = 10, другое дело перебрать сто условий в конце которых таки выяснится, что а = 10...

Оффлайн Samovar

  • Житель
Re: си плюс плюс
« Ответ #54 : 01 Ноябрь 2016, 21:04:33 »
Python - интерпретатор , т.е. набор подпрограмм (читай лажа по скорости), он  не сможет быстро работать никогда...
Это тут каким боком? Блендер использует питон для создания файла сцены посредством скрипта экспорта, стало быть это факт, от которого нам не уйти никуда. Хотим мы или нет, но без питона, не влезая в код самого блендера, файл сцены мы не создадим ни для люкса, ни для яфы, ни для поврея, ни для кого, вообще. Но, если мы посмотрим правильно, то увидим, что время отнимает у нас ни столько питон, сколько сама запись в файл, как и вывод в консоль. Даже на С программа считает 100 миллисекунд, а, если захотим видеть результат в консоли, то уйдёт минута, три, пять...
Другая сторона медали - парсер. Бесконечные сравнения, приведения... Одно дело объявить а = 10, другое дело перебрать сто условий в конце которых таки выяснится, что а = 10...
нахрена тебе экспортировать сцену куда-то, тратя на это время и память, если ты можешь читать blend-файл из памяти?
да, это сложно... но это наиболее эффективно и быстро....

Оффлайн LanuHum

  • Житель
Re: си плюс плюс
« Ответ #55 : 01 Ноябрь 2016, 21:12:31 »
но если сможешь, то лучше читай напрямую из памяти- это наилучший вариант :)
Так я ж это и делаю. Только, чтобы что-то прочитать из памяти, туда нужно сначала положить что-то. Блендера сцену в память может положить только интерпретатор питона. Ты ж раззуй глаза, я не использую бинарник блендера, я использую сборку блендера как сишный питон-модуль. Из С++ я даю команду загрузить сцену в память:
pyResult = PyObject_CallObject(pyFunc, pyArgs);

Оффлайн LanuHum

  • Житель
Re: си плюс плюс
« Ответ #56 : 01 Ноябрь 2016, 21:19:22 »
Python - интерпретатор , т.е. набор подпрограмм (читай лажа по скорости), он  не сможет быстро работать никогда...
Это тут каким боком? Блендер использует питон для создания файла сцены посредством скрипта экспорта, стало быть это факт, от которого нам не уйти никуда. Хотим мы или нет, но без питона, не влезая в код самого блендера, файл сцены мы не создадим ни для люкса, ни для яфы, ни для поврея, ни для кого, вообще. Но, если мы посмотрим правильно, то увидим, что время отнимает у нас ни столько питон, сколько сама запись в файл, как и вывод в консоль. Даже на С программа считает 100 миллисекунд, а, если захотим видеть результат в консоли, то уйдёт минута, три, пять...
Другая сторона медали - парсер. Бесконечные сравнения, приведения... Одно дело объявить а = 10, другое дело перебрать сто условий в конце которых таки выяснится, что а = 10...
нахрена тебе экспортировать сцену куда-то, тратя на это время и память, если ты можешь читать blend-файл из памяти?
да, это сложно... но это наиболее эффективно и быстро....
Да, нахера мне твой файл? В нём есть все вычисления деформаций в каждом кадре? В файле только ключи, на основании которых блендер считает деформации в каждом кадре. Или ты предлагаешь мне перенести из кода блендера все алгоритмы вычислений?
Считая анимацию в 1000 кадров, я только раз загружаю всю сцену, затем грузятся только объекты, к которым применены деформаторы сетки: кости, ключи вершин, кривые анимированные, решётки, всё что перемещает вершины относительно матрицы...

Оффлайн Samovar

  • Житель
Re: си плюс плюс
« Ответ #57 : 01 Ноябрь 2016, 21:20:29 »
Т.е. ты тупо копируешь  данные из памяти в память, а потом ещё и в свой рендерер, расходуя её в х3  больше :) Эффективней будет читать .blend напрямую из памяти, тогда расход уменьшится до х2, но это сложно...
Цитировать
Или ты предлагаешь мне перенести из кода блендера все алгоритмы вычислений?
тебе из кода бленд-файла нужны только те данные, которые поддерживает твой рендер... если он не поддерживает модификаторы, то  их придётся схлопнуть, или написать их аналоги, или юзать тормознутый Python... х.з. по идее, в рендер должна покадрово идти только ФИНАЛЬНАЯ сетка с материалами, камера и ИС, а не её модификаторы...
хочешь скорости, озадачься проблемами...
« Последнее редактирование: 01 Ноябрь 2016, 21:36:40 от Samovar »

Оффлайн LanuHum

  • Житель
Re: си плюс плюс
« Ответ #58 : 01 Ноябрь 2016, 21:51:28 »
Т.е. ты тупо копируешь  данные из памяти в память, а потом ещё и в свой рендерер, расходуя её в х3  больше :) Эффективней будет читать .blend напрямую из памяти, тогда расход уменьшится до х2, но это сложно...
Я загружаю в С++ модуль bpy, модуль загружает блендфайл, я даю команду передать данные первого кадра, получаю данные,
обнуляю PyObject :
 Py_XDECREF(pyResult);
Далее, в следующих кадрах анимированные объекты заменяются. Я не копирую, а преобразую, удаляя прообраз.
А, что касается рендера, то да, но это издержки всех рендеров. Рендеру не нужны индексы вершин, индексы нормалей и прочая хрень. Рендеру нужна точная информация. Это происходит и в интернале, он вычисляет на основе индексов и координат вершин все координаты каждой вершины, поэтому потребление памяти при просчёте возрастает. Если у тебя вершина принадлежит четырём фейсам, в Блендере в четырёх фейсах будет один индекс, указывающий на эту вершину. В рендере фейсы записывают все конкретные координаты вершин, иначе, как считать trace?
Здесь можно использовать два варианта: херовый комп и крутой комп. Для одного из них инфу можно сразу укладывать в форму для рейтрейсера. И, использовать указатели, не копируя.

Оффлайн Samovar

  • Житель
Re: си плюс плюс
« Ответ #59 : 01 Ноябрь 2016, 21:58:08 »
Ладно, Ланухумыч, извини за дерзость... я не вполне шарю, о чём ты... если тебе нет дела до того, что я к тебе пишу, то и не придавай значения.
У меня к  тебе просьба помочь (написать дополнение), если сможешь, и когда у тебя будет время... завтра подробно напишу в личку.

 


Яметрика

* По форуму

* Рекламный блок

* Последние вложения

1 (1).png
Скачано: 68
Автор: LEXA ANЭGROWND
blender.png
Скачано: 78
Автор: ipv2007
4.png
Скачано: 102
Автор: hiroyukiss
2.png
Скачано: 122
Автор: hiroyukiss

Скачано: 113
Автор: Dilifa12