"-ftrapv" and "-fwrapv": Which is better for efficiency?
The whole point of both of these options is to give the optimiser less leeway than it normally has. Therefore, unless you encounter a bug in the optimiser, the fastest should be to use neither, where the optimiser assumes your code doesn't have any overflows and doesn't emit code to handle overflows.
What what does it mean when the -ftrapv definition says it generates "traps?" Does this mean exceptions?
It doesn't mean a C++ exception. It's target-dependent, but assuming x86, it means the GCC runtime libraries cause SIGABRT to be raised that will normally abort your program. On other platforms, it might use special CPU instructions that cause a hardware exception. It's mainly useful for debugging purposes and perhaps in a few cases for safety, where the risk of continuing after overflow is greater than the risk of the program suddenly terminating.