Comment trouver la taille de la mémoire de tas d'un programme C ++ sous la plate-forme Linux? J'ai besoin d'espace mémoire de tas avant l'utilisation de nouveaux ou malloc et aussi après que toute personne aident?
#include <malloc.h>
#include <iostream>
int main()
{
//here need heap memory space
unsigned char* I2C_Read_Data= new unsigned char[250];
//get heap memory space After the usage of new
return 0;
}
6 Réponses :
Vous pouvez utiliser le GetRlimit Appel de fonction et transmettre le rlimit_data code> pour la ressource. Cela devrait vous donner la taille du segment de données pour votre programme. P>
Merci pour la réponse, pouvez-vous me donner un exemple de code?
Une simple recherche aurait donné des liens comme celui-ci - LinuxQuestions.org/Questions/programmation-9/...
Bonjour, dans ce cas, il montre l'espace mémoire, mais pas changé après que l'espace est attribué.
GetRlimit renvoie la limite pour le tas, pas ce qui est actuellement utilisé
Utilisez le profileur de tas de Valgrind: massif P>
J'utilise la plate-forme "Arm-Linux" .... Comment Valgrind peut être utilisé avec cette plate-forme? Une idée?
Vous pouvez également ajouter un suivi de tas à vos propres programmes en surchargeant le nouveau Ce n'est pas aussi minutieux que l'utilisation d'un profileur externe (en particulier lorsque des bibliothèques extérieures gèrent leur propre gestion de la mémoire), mais c'est très agréable de voir exactement quelle mémoire vous étiez responsable. P>
Nouveau code> et Supprimer code> opérateurs. Dans Un moteur de jeu je travaille sur, j'ai toutes les réparations de la mémoire à travers des fonctions spéciales, qui attachent chaque allocation à un objet de suivi en tas particulier. De cette façon, à un moment donné, je peux extraire un rapport et voir combien de mémoire est adoptée par des entités, des acteurs, des scripts Lua, etc. P>
p>
Outre l'inspection externe, vous pouvez également instruminer votre implémentation de MALLOC pour vous permettre d'inspecter ces statistiques. Pour creuser plus profondément, vous devez apprendre un peu plus de quoi fonctionne une allocation de tas. En fin de compte, le système d'exploitation est celui qui attribue la mémoire aux processus tels qu'ils le demandent, mais les demandes du système d'exploitation (SysCalls) sont plus lentes que les appels réguliers, donc en général une implémentation de Vous devez déterminer si vous êtes intéressé par la mémoire totale consommée par le processus (qui inclut le code lui-même), la mémoire du processus demandé à partir du système d'exploitation dans un appel de procédure particulier, la mémoire utilisée réellement par le En outre, la fragmentation peut être une douleur pour les deux derniers et peut quelque peu brouillard les différences entre vraiment utilisées et assignées à. p> Jemalloc CODE> et TCMALLOC CODE> Les implémentations sont des implémentations qui, en plus de mieux performer pour le code multithreadé que les implémentations de libc typiques, ajoutent des fonctions utilitaires de ce type. P>
Malloc code> demandera de gros morceaux à Le système d'exploitation (blocs de 4 kb ou de 8 kb sont courants) et les subdivisez-les à leur servir à ses appelants. P>
MALLOC CODE> Mise en œuvre (qui ajoute ses propres frais généraux de comptage de livres, aussi petit) ou la mémoire vous em> demandée. P>
sur Linux, vous pouvez lire fournit des informations sur l'utilisation de la mémoire, mesurée en pages. Les
Les colonnes sont: p>
/ proc / [pid] / statm code> pour obtenir des informations d'utilisation de la mémoire.
size total program size
(same as VmSize in /proc/[pid]/status)
resident resident set size
(same as VmRSS in /proc/[pid]/status)
share shared pages (from shared mappings)
text text (code)
lib library (unused in Linux 2.6)
data data + stack
dt dirty pages (unused in Linux 2.6)
Les unités sont des pages. Vous pouvez utiliser getconf page_size pour savoir comment une grande page est en octets.
Vous pouvez essayer "Mallinfo" et "Malloc_info". Ils pourraient travailler. Mallinfo a des problèmes lorsque vous allouez plus de 2 Go. Malloc_info est une o / s spécifique et notamment très étrange. Je suis d'accord - très souvent, il est agréable de faire ce genre de choses sans outils tiers. P>
NOUVEAU ET MALLOC N'utilisez pas la même région ...
@Umnyobe: C'est étrange, car généralement
neuf code> appels:: opérateur neuf () code>, qui est habituellement implémenté viamalloc () code> .. .Stackoverflow.com/questions/1350819/c-free-Store-vs-heap
Permettez-moi de corriger ceci: NOUVEAU et MALLOC NE PAS NON FANITAIRES B> Utilisez la même région ...
Je ne sais pas, mais j'entends que le magasin libre et le tas peuvent être utilisés de manière interchangeable. Neux-ci peuvent suggérer une fonction pour trouver un espace mémoire dynamique d'un programme C avant et après la répartition et la désallocation?