Symbian is a C++ library, with some limited support to C library. Compared with C++, Symbian has its own memory management due to the tight memory constraints in mobile platform, such as 2-Phase construction and TRAP Harnesses for exception handling. It also has its own thread model called Active Object (AO). Active Object is a single-threaded framework that allows non-preemptive multi-tasking. It is a lightweight method to provide asynchronous services. In addition, Symbian also has its own multi-threaded model and server-client model. Multi-threaded model can be used when preemptive services are required (usually for longer services). Server-client model is the most expensive in terms of resources and performance, but it provides maximum memory isolation and robustness. It is usually used to provide sharable “resources”, such as file system, network connection, databases, etc.
Porting C codes to Symbian is never trivial. Although Symbian does support STDLIB, the usage could be so different that extra effort may be needed to handle surprises. For example, the threads’ resources in C or Linux are shared within a process, while those in Symbian are private and cannot be shared with other threads without extra complexity. This makes the port and environment sharing difficult in Symbian. Moreover, prior to Symbian OS version 8.1b, static and global variables are not supported in Symbian. Thus, extra effort is required to port those static/global variables to Thread Local Storage (TLS) in Symbian, which is usually a tedious task. Since OS version 8.1b (EKA2 kernal), Writable Static Data (WSD) is introduced to support static/global variables with some memory tradeoff . In general, porting existing C codes to Symbian may save you some time than writing from scratch, and the codes can be improved to product quality if the C library limitations are not hit and the memory footprint is reasonable. For GUI applications, native Symbian models are required, or you can write a Symbian GUI wrapper to a C-style engine.