How on Earth did you conclude that OO is a performance problem based on your experience with globals?
For the record, OO was perfectly fast (Simula) until SmallTalk became synonymous with OO. (SmallTalk is still slow.) This wasn't helped by Java becoming synonymous with OO. (Java is still slow.) Turbo Pascal (which, in later incarnations, notably Delphi) was Object Pascal, was always fast. C++ may have compiled horribly slowly in the days of cfront but it never ran slow.
All OO does is allow methods to be handled by indirection the way structured variables allow fields to be handled by indirection (e.g. Types in Blitz). A couple of clock cycles to dereference a.b (a\b) isn't seriously regarded as a performance issue, dereferencing a function pointer is no different at all.
For the record, OO was perfectly fast (Simula) until SmallTalk became synonymous with OO. (SmallTalk is still slow.) This wasn't helped by Java becoming synonymous with OO. (Java is still slow.) Turbo Pascal (which, in later incarnations, notably Delphi) was Object Pascal, was always fast. C++ may have compiled horribly slowly in the days of cfront but it never ran slow.
All OO does is allow methods to be handled by indirection the way structured variables allow fields to be handled by indirection (e.g. Types in Blitz). A couple of clock cycles to dereference a.b (a\b) isn't seriously regarded as a performance issue, dereferencing a function pointer is no different at all.