(C++) à la Recherche de conseils pour réduire l'utilisation de la mémoire

J'ai un problème avec un très tendue et dure limite de mémoire. Je suis un RPC geek et je veux réduire mon utilisation de la mémoire. Merci de me donner quelques conseils.


Un de mes amis a recommandé de prendre des fonctions à l'intérieur de mon structs d'eux.
par exemple au lieu d'utiliser:

struct node{
   int f()
   {}
}

il m'a recommandé d'utiliser:

int f(node x)
{}

est-ce réellement de l'aide?

Remarque: j'ai beaucoup de copies de mon struct.


voici quelques informations:

Je code une sorte de segment de l'arbre pour un exercice de problème sur un site de juge. Je reçois des nœuds de l'arborescence dans une struct. mon struct a ces variables:

  int start;
  int end;
  bool flag;
  node* left;
  node* right;

La limite de la mémoire est de 16 MO et je suis en utilisant 16.38 MO.

  • Quel est votre programme? Quels algorithmes t-il? Il est difficile de parler des optimisations en termes généraux.
  • si vous êtes sur linux, alors vous pouvez utiliser valgrind/massif de voir où votre tas va
  • Le remplacement des fonctions de membre avec des fonctions libres de ne pas affecter la taille du code dans le moindre. Cependant, il sera plus facile de faire des erreurs comme le passage par valeur plutôt que de référence.
  • Pouvez vous indique l'URL du problème ? Ou peut-être plus de code ? Sinon, en supposant qu'aucune perte de mémoire / pas de nœuds supplémentaires créé les seules choses que vous pourriez faire est d'utiliser short au lieu de int mais cela dépend de la taille du problème..
  • Février: Ce n'est pas un problème public. mais voici un semblable et plus facile problème:z-trening.com/tasks.php?show_task=5000000081
  • c'est le même problème ? Quel est le nombre de "cartes" dans votre cas ?
  • La taille de saisie est la même. Le problème est légèrement différent, mais la différence est, en son temps, pas de la taille et je suis le résoudre en moins de 0,7 secondes
  • L'arbre binaire est un ? Alors vous n'avez pas besoin de votre nœuds, il suffit d'utiliser des tableaux pour stocker vos informations. Étant donné un nœud i les enfants sont 2i et 2i+1. Vous n'avez pas besoin de deux pointeurs.
  • Êtes-vous à l'aide de toute la récursivité sur le code ou la transmission des données par copie et non par référence?
  • Vous avez raison. Si idiot de moi.
  • une fois que vous aurez changé votre code pourriez-vous nous dire comment faible de l'utilisation de la mémoire s'est passé ?
  • Il a utilisé 14.72 MO