Eu tenho uma função que se chama 10 vezes por segundo. Eu estou usando QTimer para chamadas repetidas.
void DisplayClass::UpdateGuiWithData()
{
//miscellaneous code which is validated
SingletonObjectAsThread::instance()->UpdateFromGuiToExternalHardware(ClassOjbectArray,var1,var2);
QTimer::singleShot(100,this,SLOT(UpdateGuiWithData()));
}
Class A_ComposingClass_B_Object
{
//boolean and enum variables
B ArrayOf_B_Objects[16];
}
Class B
{
//boolean and enum vairables
}
class DisplayClass
{
//variables that are not a concern here
UpdateGuiWithData();
A ArrayOfObject_A[4];
};
Class SingletonAsThread
{
//vairables that are not a concern here
UpdateFromGui(A_ComposingClass_B_Object*,const bool&,const bool&);
};
Aqui é o negócio quando eu executar o código como está, há um aumento constante no tamanho da memória, mas quando eu comentar a chamada para UpdateFromGui chamada na classe UpdateGuiWithData, a memória permanece a um nível constante de cerca de 51 MB. A função UpdateFromGui não tem funções de alocação de memória ou GUI dinâmicas. É apenas uma função jane avião que constrói o pacote para escrever a porta serial e é chamado de 10 vezes por segundo desde esta é a taxa de atualização do hardware.
A única razão que eu poderia pensar o aumento na memória está passando a matriz de objetos com cada chamada para a função UpdateFromGui. Eu acho que com cada chamada que estamos a criar uma cópia de objetos de classe e, portanto, o aumento na memória. Então eu tentei usar passando matriz de objetos como referência para a função mas não conseguiu encontrar uma declaração adequada para tal função, embora eu achei a definição e uso de tal função. Aqui está o que eu encontrei na net.
// Receber matriz por referência.
void GetArray( int (&Array) [10] )
{
}
// Test array by reference.
void CRabbitDlgDlg::TestArray()
{
// Pass array by reference.
int Array[10] = { 0 };
GetArray( Array );
}
A minha pergunta é
---> Estou pensando na linha direita ou é algo a ver com a chamada repetida a Singleton
objeto de classe?
---> fazer também eu preciso de um construtor de cópia aqui para Classe A, embora não haja dinâmica
variáveis de alocação ou de ponteiro nesta classe?
---> O que mais pode ser a fonte deste vazamento de memória (se não a sua não sobre construtor de cópia ou chamadas únicas) que constantemente aumenta o uso de memória
da aplicação?