See
http://www.cwi.nl/htbin/sen1/twiki/bin/view/SEN1/ATermLibrary
The ATerm library forms a comprehensive procedural interface which enables creation and manipulation of ATerms in C and Java. The ATerm implementation is based on maximal subterm sharing and automatic garbage collection.
A binary exchange format for the concise representation of ATerms (sharing preserved) allows the fast exchange of ATerms between applications. In a typical application---parse trees which contain considerable redundant information---less than 2 bytes are needed to represent a node in memory, and less than 2 bits are needed to represent it in binary format. The implementation of ATerms scales up to the manipulation of ATerms in the giga-byte range.
The ATerm library provides a comprehensive interface in C and Java to handle the annotated term data-type in an efficient manner. If the terms you handle are limited to a specific signature, you can use
ApiGen? to generate typed interfaces to the same ATerms.