From ZeroMQ / Learn the basics:
In 2011, CERN (the European Organization for Nuclear Research) compared CORBA, Ice, Thrift, ZeroMQ, YAMI4, RTI, and Qpid (AMQP). Read their analysis and conclusions. (PDF)
Which might just be the comparison you were after. (Found thanks to Matthieu Rouget's comment.)
I'd also pitch in that, while some ORBs allow you to skip the marshalling, you still can't avoid the dynamic memory allocation, which is what really matters for performance. (Today CPUs are insanely fast, memory access is slow, and asking the OS to allocate a memory page is really slow.)
So wherein C++ you might just return a const string &
, CORBA's C++ binding will force you to dynamically allocate and free a string or data structure (whether by return type or out parameter). This isn't significant if the method calls across process/network anyway, but in-process it becomes quite significant compared to plain C++.
Another 'gotcha' we were burnt by, is that you can't define mutually-recusive structures (i.e. struct 'A' includes a 'B' which includes an 'A' again). This meant we had to convert those to interfaces, which allocates a CORBA Servant "server side" (in-process) per structure, which is very memory heavy. I gather there are advanced tricks to avoid actually creating servants, but ultimately we just want to get away from CORBA altogether, not dig ourselves in deeper.
Especially in C++, memory management is very fragile and difficult to program correctly. (See The Rise and Fall or CORBA, section 'complexity'.) I attribute many person-years of additional effort due to this technology choice.
I'd be curious to hear how you got on & what you adopted.