Articles of malloc

Mémoire maximale que malloc peut allouer

J’essayais de déterminer la quantité de mémoire que je pouvais utiliser dans ma machine (1 Gb de RAM 160 Gb HD Windows). J’ai lu que le maximum de mémoire que malloc peut allouer est limité à la mémoire physique (sur le tas). De plus, lorsqu’un programme dépasse la consommation de mémoire à un certain niveau, […]

Est-il préférable d’allouer de la mémoire à deux ou plus?

Lorsque nous utilisons malloc() pour allouer de la mémoire, devrions-nous indiquer la taille qui est en puissance de deux? Ou nous donnons simplement la taille exacte dont nous avons besoin? Comme //char *ptr= malloc( 200 ); char *ptr= malloc( 256 );//instead of 200 we use 256 S’il vaut mieux donner la taille qui est au […]

Pourquoi est-il plus sûr d’utiliser le pointeur sizeof (*) dans malloc

Donné struct node { int a; struct node * next; }; Malloc une nouvelle structure, struct node *p = malloc(sizeof(*p)); est plus sûr que struct node *p = malloc(sizeof(struct node)); Pourquoi? Je pensais qu’ils sont les mêmes.

Comment allouer dynamicment l’espace mémoire pour une chaîne et obtenir cette chaîne de l’utilisateur?

Je veux lire l’entrée de l’utilisateur en utilisant le programme C. Je ne veux pas utiliser le tableau comme, char names[50]; parce que si l’utilisateur donne la chaîne de longueur 10, alors les espaces restants sont perdus. Si j’utilise un pointeur de caractère comme, char *names; alors j’ai besoin d’allouer de la mémoire pour cela […]

Si free () connaît la longueur de mon tableau, pourquoi ne puis-je pas le demander dans mon propre code?

Je sais que c’est une convention courante de transmettre la longueur des tableaux alloués dynamicment aux fonctions qui les manipulent: void initializeAndFree(int* anArray, size_t length); int main(){ size_t arrayLength = 0; scanf(“%d”, &arrayLength); int* myArray = (int*)malloc(sizeof(int)*arrayLength); initializeAndFree(myArray, arrayLength); } void initializeAndFree(int* anArray, size_t length){ int i = 0; for (i = 0; i < […]

Pouvez-vous allouer un très gros bloc de mémoire (> 4 Go) en c ou en c ++?

Avec de très grandes quantités de RAM ces temps-ci, je me demandais, il est possible d’allouer un seul morceau de mémoire supérieur à 4 Go? Ou devrais-je allouer un tas de petits morceaux et gérer la commutation entre eux? Pourquoi??? Je travaille sur le traitement de certaines données XML openstreetmap et ces fichiers sont énormes. […]

malloc de taille zéro

Très simple question, j’ai fait le programme suivant: #include int main(int argc, char ** argv) { void * ptr; ptr = malloc(0); free(ptr); } Et cela ne va pas mal sur ma machine. Est-ce un comportement portable de stdlib malloc et gratuit, ou est-ce que je recherche des problèmes? Edit: Ce qui semble non portable […]

Comment fonctionne jemalloc? Quels sont les bénéfices?

Firefox 3 est venu avec un nouvel allocateur: jemalloc . J’ai entendu à plusieurs endroits que ce nouvel allocateur est meilleur. Les meilleurs résultats de Google ne donnent aucune information supplémentaire et je suis intéressé par son fonctionnement.

Si `malloc (0)` renvoie un pointeur non nul, puis-je le transmettre à `free`?

J’ai lu plus de discussions sur le comportement de malloc lorsque vous demandez un bloc de taille zéro. Je comprends que le comportement de malloc(0) est défini par l’implémentation, et il est supposé renvoyer un pointeur nul ou un pointeur non nul auquel je ne suis pas censé accéder. (Ce qui est logique, car il […]

Conversion invalide de `void * ‘à` char *’ lors de l’utilisation de malloc?

J’ai du mal avec le code ci-dessous avec l’erreur sur la ligne 5: erreur: conversion invalide de void* à char* J’utilise g ++ avec des blocs de code et j’ai essayé de comstackr ce fichier en tant que fichier cpp. Est-ce que ça importe? #include int main() { char *foo = malloc(1); if (!foo) { […]