Which compiler are you using?
I'm not sure if there is any option to switch off the use of __clear, I think it would be better to actually provide the runtime routine the compiler is using, even if you are not using all the other parts of MSL.
In the end, it makes sense for the compiler to use runtime routines for many tasks, not just for the zero initialization (but this does depend a lot on the used target of course).
Anyway, for (zero terminated) strings, especially large strings with more than just 2 elements, its a good idea to just explicitly write a zero to first element instead of using the C initializer. ANSI C states that if you init a single field or array element, every field/array element has to be written. Therefore in the following snippet
void f(void) {
char local[1000]="";
char local1[1000];
local1[0]= 0;
}
the initialization of local is rather expensive as 1000 char's have to be written, while the initialization of local1 is cheap, just the given assignment is done.
Daniel