Writable static data are per-process data that exist throughout the lifetime of the process. The use of WSD complicates memory management in many cases, especially in shared libraries. A minimum of four kilobytes is allocated for WSD every single time a DLL is loaded, even if less space is required. If 50 bytes were needed, for example, 4046 bytes would be wasted every time the DLL was loaded. For this reason, the use of WSD is highly discouraged.
In practice, WSD are globally scoped: variables declared outside of a function, struct, or class, and static variables declared in functions. WSD may be eliminated by modifying primitive types with const. Complex types (i.e., classes or structs) with non-trivial constructors will be marked as WSD whether marked const or not.
It is common in generated code to use lookup tables for some types (e.g., ENUMERATED). These tables are composed of simple types and marked as const to avoid being marked as WSD by Symbian compilers.