Ich habe eine Reihe von Doppel ausgerichtet auf 32 Byte mitWarum verursacht vmovapd segfault?
double *dst;
posix_memalign((void**)&dst, 32, 4*sizeof(double));
zugewiesen ich _mm256_store_pd(dst,q);
später verwenden und gelegentliche segfaults auf Anweisung
vmovapd YMMWORD PTR [rdi],ymm0
bekommen Warum ein segfault hier stattfindet? Kann vmovapd
einen Segmentfehler aus einem anderen Grund als Ausrichtung verursachen?
'Kann vmovapd einen Segfault aus einem anderen Grund als der Ausrichtung verursachen?' Ja, auf NULL-Zeigern (oder anderen ungültigen Zugriffen). Verwenden Sie einen Debugger und sehen Sie sich RDI an der Stelle an, an der es fehlerhaft ist, um festzustellen, ob es falsch ausgerichtet oder einfach ungültig ist. (Versuchen Sie, gdb 'x' Befehl zu verwenden, um den Speicher dort zu entleeren. Wenn gdb ungültigen Zugriff sagt, dann wissen Sie, dass es ein schlechter Zeiger ist, selbst wenn es ausgerichtet ist.) –
@PeterCordes Danke, habe ich überprüft, dass die Zeiger gültig waren. Ich habe einen Core-Dump untersucht und festgestellt, dass ich in einem Fall einen falsch ausgerichteten Zeiger übergeben habe. – stardt