- what is the right way to use strings? now, I'm obtaining them as
parameters, but the string comes without final zero, so C does not works fine... because of that, I'm copying them into a new variable (memory allocated with malloc and freed after use), but it does not seems to be very performant... is there a better way?
you have to copy string into buffer and terminate it with 0 character.
Yes.
But if possible, avoid using malloc() and free(). Instead, use the memory in Squeak's object memory. That way you can avoid fragmentation. Just right before the call to primitive (or in the primitive), copy the content of the orignal string into another String whose size is one bigger than original (by #replaceFrom:to:with:), and do basicAt: 0 at the end. You could possibly keep the buffer around and reuse it, as long as the size of the String fits in the buffer.
- in general, what is the best way to return Strings into Squeak? I have to
create an instance with interpreterProxy>>instantiateClass: each time?
yes
If you know the size of string that is returned, again you can pass an instance of String from image to the primitive and fill it in. Primitive code looks cleaner in that way.
Well, I have many doubts about how to optimize my code... where can I look to see some example code?
you can look at plugins code, which you already having in VM.
Or, you can just show the code to us!
-- Yoshiki