This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/43745] [avr] g++ puts VTABLES in SRAM
- From: "oscargarcia at renesys dot es" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 07 Dec 2015 18:21:47 +0000
- Subject: [Bug c++/43745] [avr] g++ puts VTABLES in SRAM
- Auto-submitted: auto-generated
- References: <bug-43745-4 at http dot gcc dot gnu dot org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43745
--- Comment #10 from Oscar GarcÃa <oscargarcia at renesys dot es> ---
This problem can be mitigated using "pointer to interfaces".
Instead of:
class A
{
public:
A();
void FncEatingVTableRamA();
void FncEatingVTableRamB();
void FncEatingVTableRamC();
void FncEatingVTableRamD();
void FncEatingVTableRamE();
void FncEatingVTableRamF();
virtual void FncASingleVirtualFunctionPutAllVTableInRam();
}
I use to change it to:
class IVirtual
{
virtual void FncASingleVirtualFunctionPutAllVTableInRam();
}
class ANotInRamVTable
{
IVirtual* pVirtual;
public:
A(IVirtual* pV)
{
pVirtual=pV
};
void FncEatingVTableRamA();
void FncEatingVTableRamB();
void FncEatingVTableRamC();
void FncEatingVTableRamD();
void FncEatingVTableRamE();
void FncEatingVTableRamF();
void FncNOTVirtual()
{
pVirtual->FncASingleVirtualFunctionPutAllVTableInRam();
}
class DerivedA:public IVirtual //Not derived actually
{
//REALIZE DerivedA will have VTABLE in ram because of IVirtual
ANotInRamVTable aNotInRam;
DerivedA():aNotInRam(this){};
void FncASingleVirtualFunctionPutAllVTableInRam();
}
It will not solve the problem, and I agree this is an important obstacle to
make reusable/scalable code in reduced-RAM environments but it helps sometimes.