 An example is the use of canaries, which can terminate a program when discovering bounds violations.A downside of using run-time checks such as in bounds-checking is that they impose considerable performance overhead.Memory protection, such as using non-executable stack and/or heap, can also be seen as additional run-time checks.