Каковы накладные расходы на объектно-ориентированное программирование? - PullRequest
2 голосов
/ 16 декабря 2008

У меня большой набор данных (куб данных 250 000 x 1000, удваивается, около 4-гигабайтного файла), и я хочу манипулировать им, используя предыдущий набор классов ООП, который я написал на Python. В настоящее время набор данных уже настолько велик, что для считывания в память моего компьютера мне нужно, по крайней мере, разделить его пополам, поэтому вычислительные затраты являются проблемой. Мои классы ООП создают новые объекты (в этом случае мне понадобится 250 000 новых объектов, каждый объект представляет собой массив из 1000 двойных чисел) для обработки данных. Каковы накладные расходы с точки зрения памяти и вычислений, необходимых при создании объектов для общего языка ООП? В питоне? Как насчет C ++?

Да, я понимаю, что могу создать новый класс, который будет массивом. Но 1) я уже закончил эти классы и 2) я в любом случае помещаю каждый созданный объект обратно в массив для последующего доступа. Вопрос педагогический

* обновление: я хочу работать со временем, своим временем и компьютерами. Я не хочу переписывать программу, которая у меня уже есть, если мне не нужно, и трата времени на оптимизацию кода тратит впустую мое время, мне все равно , что , если я трачу время компьютера. У меня на самом деле есть 64-битная машина с 4Gig RAM. Данные являются изображением, и мне нужно сделать несколько фильтров для каждого пикселя. *

Ответы [ 14 ]

0 голосов
/ 16 декабря 2008

Не думаю, что вопрос из-за OO.

Если мы примем C ++ в качестве языка OO и помним, что компилятор C ++ является препроцессором для C (по крайней мере, так было, когда я использовал C ++), все, что делается в C ++, действительно выполняется в C. В C очень мало накладные расходы. Так что это будет зависеть от библиотек.

Я думаю, что любые издержки будут связаны с интерпретацией, управляемым выполнением или управлением памятью. Для тех, у кого есть инструменты и ноу-хау, было бы очень легко найти наиболее эффективный C ++ или Python.

Я не вижу, где C ++ добавил бы много ненужных накладных расходов. Я не знаю много о Python.

0 голосов
/ 16 декабря 2008

Как и другие постеры. Я не верю, что Объекты будут оказывать значительное количество накладных расходов на ваш процесс. Ему нужно будет сохранить указатель на объект, но оставшиеся двойники будут занимать 99% памяти вашей программы.

Можете ли вы разделить эти данные на гораздо меньшие подмножества? Какую задачу вы пытаетесь выполнить? Мне было бы интересно узнать, для чего вам нужны все данные в памяти. Возможно, вы можете просто сериализовать его или использовать что-то вроде ленивой оценки в haskell.

Пожалуйста, опубликуйте продолжение, чтобы мы могли лучше понять вашу проблемную область.

0 голосов
/ 16 декабря 2008

«Затраты» во многом зависят от платформы и выбранной вами реализации.

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

0 голосов
/ 16 декабря 2008

Невозможно ответить, не зная форму данных и структуру, которую вы разработали, чтобы их содержать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...