This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/43745] [avr] g++ puts VTABLES in SRAM


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.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]