Un valore canarino scelto in fase di compilazione è costante da esecuzione a esecuzione, su tutte le copie del programma. Ciò significa che un utente malintenzionato può capirlo analizzando il programma; una volta che lo sanno, possono impostare il loro attacco di overflow in modo che l'overflow sovrascriva il canarino con lo stesso valore che aveva in origine, rendendo l'attacco non rilevabile.
Se il valore delle canarie viene scelto in fase di esecuzione, d'altra parte, un utente malintenzionato deve indovinarlo al primo tentativo. Se si sbaglia, l'attacco verrà rilevato; idealmente, ciò indurrebbe lo sviluppatore dell'applicazione a trovare e correggere il bug che ha permesso l'overflow in primo luogo.
Un vantaggio minore è che aumenta leggermente la sicurezza contro gli attacchi di forza bruta: per esempio, un utente malintenzionato che cerca di indovinare un canarino statico a 32 bit tramite tentativi ed errori dovrà fare una media di 2 miliardi di tentativi, dove un canarino scelto dal runtime avrà una media di circa 3 miliardi di tentativi perché il canarino può cambiare ad un valore che l'attaccante ha già provato.