C ve C++'ta başlatılmamış bellek, güvenilirlik sorunlarının yaygın bir nedenidir, ve bilgi sızıntıları olabilir. Bu sorunları önlemek için Android Bu işlem, olabildiğince fazla belleği başlatır.
Başlatılan kullanıcı alanı belleği yok
Android 12'den bu yana yığın belleği sıfırdır.
tüm platformda yerel kodda (JNI dahil) ve yığın belleğinde sıfır
tüm platform yerel işlemlerinde (ör. netd
) başlatıldı
ancak zygote
içinde veya uygulamalarda değil.
NDK ile oluşturulan birinci ve üçüncü taraf uygulamaları güçlü bir
Yığınını yerel olarak sıfırlamak için -ftrivial-auto-var-init=zero
derleyici işaretini kullanması önerilir
değişkenlerine karşılık gelir. Derleyici, gereksiz olan sıfırlamaları optimize eder.
Örneğin, bir yerel değişken açıkça başlatıldığında
(örneğin int x = 123;
x
değişkeni yalnızca bir kez başlatılır).
Programın performansta büyük bir yığın tamponu olup olmadığı
hotspot, geliştirici bir derleyici kullanarak başlatmayı devre dışı bırakabilir
özellik:
__attribute__((__uninitialized__)) char buf[BUFSIZ];
Uygulamalar ayrıca
android:nativeHeapZeroInitialized
manifest özelliği.
Alternatif olarak, yığın sıfır başlatma işlemi çalışma zamanında kontrol edilebilir
şununla:
int mallopt(M_BIONIC_ZERO_INIT, level)
Seviye 0 veya 1 olduğunda.
Başlatılmış çekirdek belleği yok
Çekirdek yığını ve yığın, GKI çekirdekleri için sıfır ilk kullanıma hazırlandı. Bu işlem, tavsiye edilir.
GKI, yığın başlatma için
CONFIG_INIT_STACK_ALL_ZERO
yapılandırması oluşturulur. Bu yapılandırma,
-ftrivial-auto-var-init=zero
derleyici işaretini kullanan çekirdek.
GKI, yığın başlatma için
CONFIG_INIT_ON_ALLOC_DEFAULT_ON
, tüm sayfa yığını, SLAB
ve SLUB ayırmalarının ilk
oluşturulduğunda sıfır başlatma işlemi yapılır. Bu seçenek
init_on_alloc=1
öğesini çekirdek olarak iletmeye benzer
seçeneği belirleyin.
Hata raporları
Araçlarımız, ek bilgiler içeren ayrıntılı hata raporları oluşturur hata ayıklamaya yardımcı olmak için kullanılır. Ek ayırma ve anlaşma konumu yığın izlemesi belirli bir tahsisin yaşam döngüsünü daha iyi anlamamızı sağlar bellek güvenliği hatalarını çok daha hızlı bir şekilde çözebilir.
Satıcılar, geliştirme sırasında hataları kontrol ederek
/data/tombstones
ve
Yerel kilitlenmeler için logcat
. Daha fazla bilgi için
Android yerel kodunda hata ayıklama için buradaki bilgilere bakın.