If there's a good reason for my information, that benefits *me*, and and the cashier explains it, I may give it. "So we can send you spam" is not a good reason.
In general, if I find shopping at a store annoying, and I can purchase the goods somewhere else, I will simply stop shopping there. I'm generally only interested in making a formal complaint if I think it will actually be useful to me - something that can be addressed immediately, or for smaller businesses where the manager actually has power to change. For a large chain, with decisions made at headquarters, it's not really worth my time to look up the address and write a complaint letter if I've got other, less annoying options.