Ist es auf dem Stack oder Heap?
Habe ich einige C-code, dass ist so etwas wie ein puzzle. Für einen Grund zu tun, mit diesem code, ich Frage mich, wie kann ich feststellen, ob ein struct
Objekt landen wird auf dem heap oder stack?
Sind die Objekte nicht mit malloc
oder calloc
. Sie beginnen, Ihr Leben in form eines Arrays. Für die Zwecke dieses post, ich werde rufen Sie die Struktur der Emp.
Emp myEmp[6];
/* Each myEmp[?] item is populated in code */
Die Objekte sind sortiert und bearbeitet in verschiedenen weisen und an einem gewissen Punkt, werden die Objekte kopiert und dann übergeben, um ein array-Zeiger. Das kopieren erfolgt über memcpy
. Die Objekte werden dann in etwas wie: Emp* emps_a[6]
.
Die Objekte gehen von einer Kopie und zugeordnet sind, in der oben emps_a.
int i;
for( i = 0; i < n; i++ )
{
emps_a[i] = myEmpsCopy + i;
}
Ich bin mir nicht sicher, ob einige oder alle dieser hat Einfluss auf meine Frage. Ich brauche nie free() oder den Speicher Aufräumen... ich fürchte, ich weiß nicht allzu viel über C.
Hilfe wird sehr geschätzt.
- Faustregel: wenn Sie angerufen malloc, müssen Sie rufen Sie kostenlos. Die inverse--Wenn Sie nicht rufen malloc, darf man Sie nicht nennen kostenlos ist--in der Regel, aber nicht immer, wahr. (Einige Funktionen rufen malloc für Sie. Wenn Sie es tun, dies sollte klar gesagt werden, in großen roten Buchstaben in die Funktion der Dokumentation.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verlassen, Globale Variablen und Variablen, die mit
static
modifier (zugeteilt in einem separaten Speicherbereich) beiseite, lokale Variablen in einer Funktion Körper zugeteilt werden, auf den stack in der Erwägung, dass was auch immer Sie nennenmalloc
für ist dem heap zugeordnet. Auch, C99 variable sized arrays und Speicher mit_alloca
wird am Ende auf dem stack.Beispielsweise in dem obigen code, es gibt eine Reihe von
int*
Werte auf dem stack holding-Adressen an 10 verschiedenen Standorten im heap.