We are involved in ongoing activities to subset ACE+TAO to make them more flexible and to reduce their memory footprint for embedded systems. This document describes what we've done thus far, what we're planning to do next, and how to leverage our efforts to minimize the size of your ACE+TAO applications.
Previous ACE+TAO subsetting efforts were mainly concerned with breaking up ACE into multiple libraries. Although this is a worthy goal, the existing component definitions in ace.mpc are too tighly coupled. Therefore, even if ACE is compiled into multiple libraries, applications will still have to link almost every one of them.
Potentially more satisfying results can be obtained through the use of namespaces, e.g., ACE_OS, and/or breaking up large cpp's into smaller ones to decrease the size of object files, and statically linking them into the application.
In fact, this technique was applied systematically to ACE_OS in 2003, and resulted in a 10-15% decrease in overall footprint for statically linked applications. Interestingly, these techniques also helped reduce compilation times by ~50%.
Another very powerful technique for reducing the size of shared
libries is The Shared Library
Reduction (soreduce
) tool. soreduce
also benifits from the techniques listed above and should give
results comparable to static linking. In fact, when deploying multiple
applications, use of shared libraries with soreduce
will
result in smaller overall footprint than static linking.
Future work includes converting additional classes to namespaces, e.g., ACE, modifying inlines to reduce unneeded coupling, and refactoring some of the ubiquitous classes and frameworks in ACE, e.g., Logging, to further reduce coupling (which should make it possible to break up ACE into multiple independent libraries).
Anyone interested in contributing to the effort should contact d.hinton@vanderbilt.edu.
Back to the ACE
home page.
Back to ACE Documentation Home.