The adjoint method is a powerful technique for conducting gradient-based flow control and optimization problems. A major limitation of this approach is its excessive data storage requirement when it is applied to unsteady simulations with either long timescales or large meshes. In this work, two solutions to this problem are described and explored. The first solution, checkpointing, relies on repeating certain calculations. The second solution appears to be novel and not well described in the literature. It is based on the Incremental Principal Component Analysis, and sacrifices accuracy for a smaller storage burden. These solutions are implemented for use with the SU2 finite volume solver, and their performance is compared. Two example cases are presented: an unsteady flow control problem, where the adjoint technique is used to minimize the average drag on a rotating cylinder, and a shape optimization problem, where the accuracy of the goal function gradient calculation is investigated.