Alokasikan objek secara dinamis, apakah anggota yang bukan ptrs (tidak dialokasikan secara dinamis) di struct akan berada di tumpukan, bukan di heap?

Katakanlah saya punya struct ini:

typedef struct List_object list;
struct List_object {
    char* name;
    struct stat stats;
};

Utamanya:

list** listObjects = malloc(sizeof(list*) * n);
    for(int i = 0; i < n; i++) {
        listObjects[i] = malloc(sizeof(list));
        listObjects[i]->name = malloc(sizeof(char) * 124);
    }

maka saya memiliki fungsi yang mengaturnya:

void setListObjects(char* name, struct stat stats);

Saya bertanya-tanya apakah anggota data struct stat stats di setiap objek array listObjects akan ada di heap juga?

Atau apakah hanya listObjects dan name anggota datanya karena keduanya dialokasikan dengan malloc, dan bukan stats?


person Community    schedule 28.08.2020    source sumber
comment
Semua memori yang dialokasikan secara dinamis akan berada di heap.   -  person Jonathan Leffler    schedule 28.08.2020
comment
@JonathanLeffler Karena saya tidak secara dinamis mengalokasikan statistik struct stat dan menetapkan salah satu elemen listObjects menjadi itu, listObjects[i]-›stats = stats di dalam fungsi: setListObjects(char* name, struct stat stats), akan listObjects [i]-›statistik hanya ada di tumpukan?   -  person    schedule 28.08.2020
comment
Dengan list** listObjects = malloc(sizeof(list) * n); Anda membuat sesuatu dari sebuah penunjuk ke list dan menugaskannya ke penunjuk ke penunjuk ke list. Ukurannya tidak cocok. Apakah maksud Anda list** listObjects = malloc(sizeof(list*) * n);?   -  person Yunnosch    schedule 28.08.2020
comment
Tidak ada yang namanya stack dan heap dalam bahasa C. Kata-kata ini tidak muncul dalam teks standar. Implementasi Anda mungkin menggunakan stack dan/atau heap untuk mengimplementasikan bahasa tersebut, tetapi hal-hal ini adalah detail implementasi.   -  person n. 1.8e9-where's-my-share m.    schedule 28.08.2020


Jawaban (1)


Saya bertanya-tanya apakah statistik struct stat anggota data di setiap objek array listObjects akan ada di heap juga?

Ya. Setiap anggota struct akan dialokasikan di heap. Meskipun perlu diperhatikan bahwa meskipun penunjuk name itu sendiri dalam contoh Anda akan dialokasikan bersama dengan struct di heap, yang ditunjuknya bisa berupa apa saja.

person Lundin    schedule 28.08.2020