In C++ it all comes down to how it was allocated. If it was new'd, it's on the heap, otherwise it's on the stack. The same is equally true for classes.
For example:
MyStruct * struct = new MyStruct(); // Heap
MyStruct struct2; // Stack
Yes, exactly as C (using malloc instead of new), but the way you said it seemed like you meant that structs would be allocated on the heap on CPP and on stack on C#.