LINUX.ORG.RU

Взаимодействие фортрана и Си.


0

1

Проблема.

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

У меня логика программы написана на фортране, то есть шаги определяются в моей программе самостоятельно. И на каждом шаге надо вызывать программу на Си(вычислять 1 шаг) скармливая ей параметры из моей основной программы.

И вот тут возникает вопрос для корректной работы я должен на 1-ом шаге инициализироваться(выделить память, это можно сделать в самой программе на Си) и после каждого шага обнулять память, но не освобождать ее и передавать назад в программу на фортране, а затем передавать обратно в программу на Си. Естесвенным способом мне видится передавать указатель на 1-ый элемент выделенной памяти. Но сама структура довольно сложная(это ячейка октарного дерева, которая содержит ссылки на след. свободные ячейки) и определить ее в фортране с помощью надежного метода(ISO C BINDING) не получается.

Какие вы видите пути решения, я вижу 2:

1) освобождать память на каждом шаге

2) попробовать определить похожие структуры на фортане на авось и скормить их подпрограмме на си.

Что еще можно сделать?



Последнее исправление: gameover__ (всего исправлений: 1)

напиши Си-шные функции для работы со структорой и дергай их из фортрана.

Reset ★★★★★
()

>попробовать определить похожие структуры на фортане на авось и скормить их подпрограмме на си
Вот этого делать лучше не стоит.

Еще такой вопрос, данные, которые передаются программе на C - постоянно разные? Если да, то на аллокации/деалоокации вы много не потеряете, если вычислительный шаг на С достаточно большой (я так понимаю, что ситуация именно такая).

trex6 ★★★★★
()
Ответ на: комментарий от Reset

Варианты воспользоваться более низкоуровневыми функциями на си, рассматриваются, но неохотно, скорее позже все перепишу на фортране(слишком там в сишном коде все захардкожено(по всей видимости оптимизировался под минимальное потребление памяти), тяжко выковыривать).

gameover__
() автор топика
Ответ на: комментарий от trex6

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

gameover__
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.